javascript - 使用 promises 在嵌套循环中保存

标签 javascript for-loop parse-platform save promise

我想在一个列中保存一个名为 singleInfo 的对象,用于限定 parseObjects,如下所示。下面的代码选择要保存到的正确对象,但它只将用于最后一个对象的数据保存到所有对象。我很确定这是我如何进行循环的问题。我认为 promise 会解决这个问题。我过去使用过类似的 promise 模式,提供了很好的结果,但这次没有用。我认为这与嵌套循环有关,因为之前我只在单个循环中使用过这种模式。

var func = function(){
    var promise = Parse.Promise.as();
    var array = [];
    var pairs = [parseObject, parseObject, parseObject];
    var a = pairs.length;
    while(a--){
        var pair = pairs[a];
        var singles = [obj, obj, obj, obj, obj];
        var b = singles.length;
        while(b--){
            var single = singles[b];
            if(single.value === pair.get('value')){
                var singleInfo = {news: single.news, time: pair.get('time')}
                query.get(pair.id, {
                    success: function (goal){
                        goal.set('newColumn', singleInfo);
                        array.push(goal.save());
                    }
                });
            }
        }

        promise.then(function(){
            return Parse.Promise.when(array);
        }

最佳答案

编辑:

我没有完全理解你的代码(缺少括号),但我认为问题出在这一行 return Parse.Promise.when(array); , 因为 array在成功回调时得到更新,所以 Promise.when可能对不正确的数组进行操作,

我已经从 while 循环(for a)中取出该行,promisified query.get ,还没有测试过,希望它能正常工作以及您所期望的...

var func = function(){
    var array = [];
    var pairs = [parseObject, parseObject, parseObject];
    var a = pairs.length;
    while(a--){
        var pair = pairs[a];
        var singles = [obj, obj, obj, obj, obj];
        var b = singles.length;
        while(b--){
            var single = singles[b];
            if(single.value === pair.get('value')){
                var singleInfo = {news: single.news, time: pair.get('time')};
                array.push(pGet(pair.id, singleInfo));
            }
        }
    }

    return Parse.Promise.when(array).then(function(){
        var promises = [];
        for(var i=0;i<arguments.length;i++){
            promises.push(arguments[i]);
        }
        return Parse.Promise.when(promises);
    });
}              

function pGet(id, info){        
    var promise = new Parse.Promise();
    query.get(id, {
        success: function (goal){
            goal.set('newColumn', info);
            promise.resolve(goal.save());
        }
    });

}

旧答案

<罢工> 解决它的最简单方法是,用匿名函数包装它....

           ...
           var singleInfo = {news: single.news, time: pair.get('time')}
           (function(id, info){
               query.get(id, {
                   success: function (goal){
                   goal.set('newColumn', info);
                   array.push(goal.save());
                   }
               });
           })(pair.id, singleInfo);
           ...

<罢工>

关于javascript - 使用 promises 在嵌套循环中保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291496/

相关文章:

javascript - 用户界面选择 : Search box not shown to search when data is an empty array

javascript - 如何知道何时向下滚动?

python - Python 中的最大素数回文

jquery - FullCalendar View 在加载时未显示

android - 查询用户 "this authentication method is unsupported"时出现问题

javascript - React onClick setState 然后运行函数

php - jquery,javascript 用@更改文本以链接

Excel VBA - 对于下一个循环 - 查找显示列的列号和存储的结果

java - 统计输入字符的次数--Do-While Loops Java

javascript - 无法传递查询结果以查看并呈现为 JSON