2014-04-09 64 views
1

功能:的foreach与承诺的JavaScript

users.forEach(function(user) { 
    window.server.users.add(user); 
}); 

我要的是等到值是“成功”的插入,然后才添加下一个。这重复,直到foreach结束。 “添加”功能默认返回承诺,但我不知道如何更改代码来执行此操作。

users.forEach(function(user) { 
    window.server.users.add(user).then(function(){ 
    //insert finished 
    }); 
}); 
+0

jQuery有一个'each'和'promise',你都不可能使用起来 – njzk2

回答

5

不要使用forEach。保留你自己的索引变量,并定义一个使用它的函数,然后在promise的回调中排队。

var i = 0; 
addUser = function() { 
    if (i >= users.length) return; 

    window.server.users.add(users[i++]).then(addUser); 
} 

addUser(); 
+0

这看起来不正确的:'返回,如果我> users.length;' –

+2

犯错,是的,回落至的CoffeeScript那里有一秒...... – meagar

3

假设承诺执行遵循标准的承诺/ A +的建议,你可以链中的承诺,通过返回一个新的承诺形成then回调:

var promise = window.server.users.add(users[0]); 
users.slice(1).forEach(function(user) { 
    promise = promise.then(function() { 
     return window.server.users.add(user); 
    }); 
});