循环承诺


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。因此,承诺必须以链式运行 - 采取适合内存的小批量。

目前也绑定到 ES6 代码,并且尚未添加填充/转译。因此,期望 ES6 代码的结果。

PS:不是JavaScript专家,请为失误道歉

问题是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;
}

快速浏览一下:

在任何时候,您都不会将"继续"设置为"false",因此它将继续循环您的操作。

最新更新