為承諾寫循環的正確方法。如何正確構造循環以確保以下內容承諾電話和鎖鏈logger.log(RES)在迭代過程中同步運行?(藍鳥)db.getUser(email).then(function(res) { logger.log(res); }); // this is a promise我嘗試了以下方法http:/blog.victorQun.com/javascript-諾言-時間-循環 )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);有什么建議嗎?
3 回答
哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
我認為它不能保證調用logger.log(Res)的順序;
resolve
有什么建議嗎?
promiseWhile(…, function() {
return db.getUser(email)
.then(function(res) {
logger.log(res);
count++;
});})…while
var promiseWhile = Promise.method(function(condition, action) {
if (!condition()) return;
return action().then(promiseWhile.bind(null, condition, action));});whilefor
var promiseFor = Promise.method(function(condition, action, value) {
if (!condition(value)) return value;
return action(value).then(promiseFor.bind(null, condition, action));});promiseFor(function(count) {
return count < 10;}, function(count) {
return db.getUser(email)
.then(function(res) {
logger.log(res);
return ++count;
});}, 0).then(console.log.bind(console, 'all done'));
子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
// Given async function sayHifunction sayHi() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('Hi');
resolve();
}, 3000);
});}// And an array of async functions to loop throughconst asyncArray = [sayHi, sayHi, sayHi];
// We create the start of a promise chainlet chain = Promise.resolve();
// And append each function in the array to the promise chainfor (const func of asyncArray) {
chain = chain.then(func);}// Output:// Hi// Hi (After 3 seconds)// Hi (After 3 more seconds)- 3 回答
- 0 關注
- 560 瀏覽
添加回答
舉報
0/150
提交
取消
