function reduce(functn, intialPromise) {
var proceed = true;
var promise = intialPromise;
do {
functn(promise).then(next => {
proceed = next.proceed;
promise = next.promise;
});
} while(proceed);
return promise;
}工人函数
let promiseFunction = (promise) => {
let proceed = true;
return promise.then(() => {
// some processing in which proceed can become false
let nextPromise = {};
if(proceed){
nextPromise.proceed = true;
nextPromise.promise = next promise task;
}
else {
nextPromise.proceed = false;
nextPromise.promise = Promise.resolve(true);
}
return Promise.resolve(nextPromise);
});
};执行
reduce(promiseFunction, initialPromise).then(() => {
return success;
});此代码正在连续循环。
这个想法是把承诺捆绑在一起。承诺行为的数据很大,比如1GB。但是分配给承诺处理的内存是低的- 100 MB。因此,这一承诺必须以链取小批的形式运行,这些批次都适合于记忆。
目前还与ES6代码捆绑在一起,而且还没有添加多填充/转换。因此,期望在ES6代码中得到结果。
PS:不是javascript专家,请为错误道歉。
发布于 2017-10-13 10:50:37
问题是do-while是同步的(如果我是对的)。看看JavaScript ES6 promise for loop
对于async/await,它应该可以工作
async function reduce(functn, intialPromise) {
var proceed = true;
var promise = intialPromise;
do {
const result = await functn(promise);
proceed = result.proceed;
promise = result.promise;
} while(proceed);
return promise;
}发布于 2017-10-13 10:44:02
简单地看一下这个:
在任何时候,您都不会将“继续”设置为"false",因此它将继续循环您的同时操作。
https://stackoverflow.com/questions/46728002
复制相似问题