我使用Sequelize,它使用Bluebird承諾並需要迭代對象數組(每次插入它們 - bulkCreate無法處理mssql上的重複檢查)。承諾:遍歷數組
它看起來是這樣的:
var users = [.....] // Filled up somewhere else.
Product.create(model)
.then(function() {
return users;
})
.each(function(user) {
return User.create(......);
})
我的問題是:是否確定要返回的東西陣列(未承諾)就像我的怎麼辦呢?
編輯:另一個例子
這裏是另一個,更好,例如,我試圖做(與這個例外是的setTimeout(),而不是數據庫寫入)。它看起來像它的作品。它接受數組中的每個元素(2,3,4)並執行send()函數。
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!
每個「數字」之間有一個小的延遲。
你想達到什麼目的 - 代碼看起來不會工作 - 它做什麼? –
它是僞代碼(種類)...我想爲數組中的每個項目執行一次數據庫插入調用。 – Sten
如果你返回一個值,那不是來自'then()'的Promise,這個值將被一個Promise包裝。所以你的代碼不會按照你的意圖工作。 – Sirko