Promises:遍历数组
Promises: Iterating over an array
我正在使用 Sequelize,它使用 Bluebird promises 并且需要遍历对象数组(一个一个地插入它们 - bulkCreate 无法处理对 mssql 的重复检查)。
看起来像这样:
var users = [.....] // Filled up somewhere else.
Product.create(model)
.then(function() {
return users;
})
.each(function(user) {
return User.create(......);
})
我的问题是:return 像我当时做的那样的一系列东西(不是承诺)可以吗?
编辑:另一个例子
这是我尝试做的另一个更好的例子(除了这是一个 setTimeout() 而不是数据库写入)。它看起来像它的工作原理。它获取数组中的每个元素(二、三、四)并执行发送到 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!
每个 "number" 之间有一个小的延迟。
Is it ok to return an array of stuff (not promises) from a then
callback?
是的,这完全没问题。 returned promise 将直接使用回调 return 值解析,而不是某些 promise 的结果。 then
确实会自动区分承诺和非承诺,作为其同化过程的一部分。您的 returned users
数组在这方面与您上次(记录)回调 returns.
的 undefined
没有什么不同
你的第二个例子完全没问题,只是在你的第一个例子中我有点担心“在其他地方填满了” - 你应该尽可能保持本地. users
似乎并不真正依赖于 Product.create(model)
promise 的结果,因此将它们放入该回调有点奇怪。
我正在使用 Sequelize,它使用 Bluebird promises 并且需要遍历对象数组(一个一个地插入它们 - bulkCreate 无法处理对 mssql 的重复检查)。
看起来像这样:
var users = [.....] // Filled up somewhere else.
Product.create(model)
.then(function() {
return users;
})
.each(function(user) {
return User.create(......);
})
我的问题是:return 像我当时做的那样的一系列东西(不是承诺)可以吗?
编辑:另一个例子
这是我尝试做的另一个更好的例子(除了这是一个 setTimeout() 而不是数据库写入)。它看起来像它的工作原理。它获取数组中的每个元素(二、三、四)并执行发送到 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!
每个 "number" 之间有一个小的延迟。
Is it ok to return an array of stuff (not promises) from a
then
callback?
是的,这完全没问题。 returned promise 将直接使用回调 return 值解析,而不是某些 promise 的结果。 then
确实会自动区分承诺和非承诺,作为其同化过程的一部分。您的 returned users
数组在这方面与您上次(记录)回调 returns.
undefined
没有什么不同
你的第二个例子完全没问题,只是在你的第一个例子中我有点担心“在其他地方填满了” - 你应该尽可能保持本地. users
似乎并不真正依赖于 Product.create(model)
promise 的结果,因此将它们放入该回调有点奇怪。