다음 promise 호출 과 연결된 logger.log (res) 가 반복을 통해 동 기적으로 실행 되도록 루프를 올바르게 구성하는 방법은 무엇입니까? (블루 버드)
db.getUser(email).then(function(res) { logger.log(res); }); // this is a promise
나는 다음과 같은 방법을 시도했다 ( http://blog.victorquinn.com/javascript-promise-while-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');
});
작동하는 것처럼 보이지만 logger.log (res); 호출 순서를 보장하지 않는다고 생각합니다 .
어떤 제안?
while
코드가 작동하는 방식인가요?
loop
함수를 사용한 재귀 는 동기 루프를 수행하는 방법입니다). 왜 보장이 없다고 생각합니까?