LoginSignup
4
3

More than 5 years have passed since last update.

[Parse]saveAll()に注意

Last updated at Posted at 2015-07-17

またまた、ひょんな罠にハマったので、
注意喚起を兼ねつつ愚痴..(ry

結論

いきなりですが、深い話ではないのでさくっと

リファレンスのsaveAll()の説明には抜けがある!

っていうことです。
リファレンスによるとPase.Object.saveAll()
戻り値なしのvoidっぽい書き方されてるんですけど(今は....)
実際やってみると、他の操作どうようPromiseオブジェクトを返してきます

なので、これを拾わずに処理をすると、終わってしまったり、
エラーハンドリングができなかったりします

ま、Pase.Object.destroyAll()には、ちゃんとreturnの記載があるので、
そこで気づくべきなんですけど...

実際に遭遇した問題

Cloud.Codeでとあるジョブを登録して実行してたのです...

main.js

Parse.Cloud.job("MyJob", function(request, response) {
    var Foo = Parse.Object.extend('Foo');
    var query = new Parse.Query(Foo);
    query.equalTo('bar', 'xxx');
    query.find().then(function(list) {
        // ここでlistをもとに何かParse.Objectの配列を作って
        var objects = [];
        // 保存をする

        // saveAll()がvoidだとおもってたので promise 作成
        var promise = new Parse.Promise();
        Parse.Object.saveAll(objects, {
            success: {
                return promise.resoleve('success');
            },
            error: {
                return promise.reject('error!');
            }
        });
    }).then(function(result) {
        // 正常終了
        response.success('fin');
    }, function(error) {
        // エラー終了
        response.error('error');
    });
});

とま、こんな感じで、リストを取得して、
それを編集して別のテーブル(クラス)へBulkInsertするっていう処理をしたかったのですが、
運良く(?)saveAll()でエラーがおきてたんですけど
なぜかsuccessの方を通るっていうね...

saveAll()Promiseオブジェクトを返すっていうなら、
話はかわってくるんですよね...
ちゃんとリファレンスをみてたばっかりに、こう書いてたのに!(しつこいw

結局はこう

main.js

Parse.Cloud.job("MyJob", function(request, response) {
    var Foo = Parse.Object.extend('Foo');
    var query = new Parse.Query(Foo);
    query.equalTo('bar', 'xxx');
    query.find().then(function(list) {
        // ここでlistをもとに何かParse.Objectの配列を作って
        var objects = [];
        // 保存をする

        // saveAll()がPromiseを返すのでそのまま投げる
        return Parse.Object.saveAll(objects);

    }).then(function(result) {
        // 正常終了
        response.success('fin');
    }, function(error) {
        // エラー終了
        response.error('error');
    });
});

ただ返せばいい。そう...ただ返せば...orz

いや、なんだかんだいっても、重宝してますよ。Parse!!(笑)

参考

Parse.Object - Parse JavaScript SDK Reference
くっそーーー!(`;ω;´)

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3