2017-03-29 7 views
1

私は、既存のParseオブジェクトのIDを渡して、そのオブジェクトを操作して保存し、JS SDKで実装されているクライアントに返します)。 CC関数が以前に設定したプロパティを設定解除すると、クライアントは返されたオブジェクトの古い値を引き続き参照します(db内にプロパティが正しく保存されているにもかかわらず、undefined)。オブジェクトがクライアントによって再フェッチされた場合にのみ、プロパティーは正しい値を持ちます。CloudCodeで設定解除されたプロパティは、ローカルの解析キャッシュによって上書きされます

だからここに問題を暴露するシンプルなCC機能です:

function manipulate(req, res) { 
    new Parse.Query('MyObject') 
    .get(req.params.id) 
    .then(obj => { 
     obj.unset('foo'); 
     return obj.save(); 
    }) 
    .then(obj => res.success(obj)); 
} 

そしてここでは、クライアント側のコードです:

obj.set('foo', 'bar'); // obj was fetched with a query 
Parse.Cloud.run('manipulate', { id: obj.id }) 
    .then(updatedObj => { 
    // 'foo' should be undefined but still is set to 'bar' 
    assert(updatedObj.get('foo') === 'bar'); 
    }); 

どうやら返されたオブジェクトは、そのプロパティ事実に関する情報が含まれていません設定されていなかったので、Parseはキャッシュされた値fooを使用し続けます。

私はこれをバグと見なしますが、私がAPIの使い方に間違いを犯すと、私は間違っていると証明されています。これを解決する方法に関するヒントは大歓迎です!

ご注意:私は「設定されていない」状態を表す2つの異なる値(nullundefined)を有する避けたいので、私は(実際に働くことになる)obj.set('foo', null)を使用する必要はありません。

答えて

0

醜い回避策を使用して終了しました。プロパティを設定しない可能性がある関数を呼び出すときは、返されたオブジェクトにfetchを呼び出して、キャッシュされた値が表示されていないことを確認します。私は2番目のクライアント - サーバー往復を持っているので、パフォーマンスの面で恐ろしい解決策です。

解決方法がわかっている場合は、回答またはコメントを追加してください。

関連する問題