Cách xây dựng chính xác một vòng lặp để đảm bảo cuộc gọi hứa hẹn sau đây và logger.log (res) chạy đồng bộ thông qua việc lặp lại? (chim xanh)
db.getUser(email).then(function(res) { logger.log(res); }); // this is a promise
Tôi đã thử cách sau (phương pháp từ http://blog.victorquinn.com/javascript-promise-fter-loop )
var Promise = require('bluebird');
var promiseWhile = function(condition, action) {
var resolver = Promise.defer();
var loop = function() {
if (!condition()) return resolver.resolve();
return Promise.cast(action())
.then(loop)
.catch(resolver.reject);
};
process.nextTick(loop);
return resolver.promise;
});
var count = 0;
promiseWhile(function() {
return count < 10;
}, function() {
return new Promise(function(resolve, reject) {
db.getUser(email)
.then(function(res) {
logger.log(res);
count++;
resolve();
});
});
}).then(function() {
console.log('all done');
});
Mặc dù nó có vẻ hoạt động, nhưng tôi không nghĩ nó đảm bảo thứ tự gọi logger.log (res);
Bất kỳ đề xuất?
while
mã đó hoạt động?
loop
hàm là cách thực hiện các vòng lặp đồng bộ). Tại sao bạn nghĩ rằng không có bảo đảm?