私は、既存の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つの異なる値(null
とundefined
)を有する避けたいので、私は(実際に働くことになる)obj.set('foo', null)
を使用する必要はありません。