承诺:迭代数组

时间:2015-09-09 09:46:06

标签: javascript bluebird

我正在使用Sequelize,它使用Bluebird promises并需要迭代一个对象数组(逐个插入它们 - bulkCreate无法处理对mssql的重复检查)。

它看起来像这样:

var users = [.....] // Filled up somewhere else.

Product.create(model)
  .then(function() {
      return users;
  })
  .each(function(user) {
      return User.create(......);
  })

我的问题是:可以像往常一样返回一系列东西(不是承诺)吗?

编辑:另一个例子

这是我尝试做的另一个更好的例子(除了这是一个setTimeout()而不是数据库写)。它看起来很有效。它接受数组中的每个元素(两个,三个,四个)并执行函数send to each()。

var Promise = require("bluebird");
function myDelay(who) {
    var deferred = Promise.pending();

    console.log("Starting: " + who);

    setTimeout(function() {
        console.log("Done with: " + who);
        deferred.resolve();         
    }, 250);

    return deferred.promise;
}

myDelay("one")
    .then(function() {
        return ["two", "three", "four"];
    })
    .each(function(who) {
        return myDelay(who);
    })
    .then(function() {
        console.log("All done!");
    });

在我看来,它工作得很好。输出如下:

Starting: one
Done with: one
Starting: two
Done with: two
Starting: three
Done with: three
Starting: four
Done with: four
All done!

每个"数字"之间有一个小延迟。

0 个答案:

没有答案