【发布时间】:2018-03-25 11:26:58
【问题描述】:
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;
});
这段代码不断循环。
这个想法是用链式承诺。承诺执行的数据很大,比如 1 GB。但是为承诺处理分配的内存很低 - 100 MB。因此,promise 必须链式运行 - 采用适合内存的小批量。
目前也与 ES6 代码相关联,尚未添加 polyfills/transpiling。因此期待 ES6 代码中的结果。
PS:不是 javascript 专家,请为错误道歉
【问题讨论】:
-
你提供什么来代替
initialPromise? -
这是一个有效的承诺 - 假设它的
Promise.resolve(true) -
then在不执行调用中提供的处理程序的情况下返回一个承诺。这些将在一段时间后异步执行,如果并且何时调用了承诺then已解决。更改proceed的代码是异步的,稍后执行,并且在循环执行时不会更改循环变量 - 所以它永远循环。尝试搜索“递归承诺函数”(SO 上有 543 个结果)
标签: javascript promise es6-promise