首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >承诺在循环中

承诺在循环中
EN

Stack Overflow用户
提问于 2017-10-13 10:40:50
回答 2查看 221关注 0票数 2
代码语言:javascript
复制
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;
}

工人函数

代码语言:javascript
复制
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);
    });
};

执行

代码语言:javascript
复制
reduce(promiseFunction, initialPromise).then(() => {
    return success;
});

此代码正在连续循环。

这个想法是把承诺捆绑在一起。承诺行为的数据很大,比如1GB。但是分配给承诺处理的内存是低的- 100 MB。因此,这一承诺必须以链取小批的形式运行,这些批次都适合于记忆。

目前还与ES6代码捆绑在一起,而且还没有添加多填充/转换。因此,期望在ES6代码中得到结果。

PS:不是javascript专家,请为错误道歉。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-13 10:50:37

问题是do-while是同步的(如果我是对的)。看看JavaScript ES6 promise for loop

对于async/await,它应该可以工作

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2017-10-13 10:44:02

简单地看一下这个:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46728002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档