0

我使用下面的代码(下面简化了例如sake_来获取我的数据库中的所有用户,然后访问一个外部API,它返回我想要保存在数据库中用户行中的数据。

它似乎不起作用...用户数据未保存。我是 Parse 的新手……那我做错了什么?

Parse.Cloud.job("updateToken", function(request, status) {

    Parse.Cloud.useMasterKey();
    var query = new Parse.Query(Parse.User);

    query.find().then(function(results) {

        var promises = [];

        _.each(results, function(user) {

                promises.push(function() {

                    Parse.Cloud.httpRequest({
                      url: "http://www.example.com/",
                      success: function(httpResponse) {

                        user.set("authSave", httpResponse.text);
                        return user.save();

                      },
                      error: function(httpResponse) {
                        user.set("authSave", "testFail");
                        return user.save();
                      }
                    });
                });
        });

        Parse.Promise.when(promises);
    }).then(function(){
        status.success("YAY!");
    });

});
4

2 回答 2

1

因为 httpRequest 是异步的,所以在 httpRequest 调用它们的回调之前,您传递给您的承诺数组的函数将全部完成。

您想使用从 httpRequest 方法返回的承诺,并改为使用数组。

像这样

Parse.Cloud.job("updateToken", function(request, status) {

    Parse.Cloud.useMasterKey();
    var query = new Parse.Query(Parse.User);

    query.find().then(function(results) {

        var promises = [];

        _.each(results, function(user) {

            promises.push(Parse.Cloud.httpRequest({
                    url: "http://www.example.com/"
                }).then(function(httpResponse) {
                    user.set("authSave", httpResponse.text);
                    return user.save();
                }, function(error) {
                    user.set("authSave", "testFail");
                    return user.save();
                })
            );
        });

        Parse.Promise.when(promises);
    }).then(function(){
        status.success("YAY!");
    });
});

很抱歉,如果这不完美,因为我没有测试。但它应该引导你朝着正确的方向前进。

于 2013-11-11T11:04:44.237 回答
0

没有花时间检查,但他处理 query.find.then 的函数应该返回一个承诺。

尝试:

query.find.then(function(results) {

   ...

   return Parse.Promise.when(promises);

}).then (function(){
    status.success("YAY!");
});
于 2013-10-27T13:46:22.150 回答