Foreach与承诺javascript

时间:2014-04-09 20:01:38

标签: javascript ember.js

功能:

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

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

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

2 个答案:

答案 0 :(得分:5)

请勿使用forEach。保留自己的索引变量,并定义一个使用它的函数,然后将其自身排列在promise的回调中。

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

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

addUser();

答案 1 :(得分:3)

假设承诺实施遵循标准的Promise / 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);
    });
});