2014-04-09 102 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); 
    }); 
});