首页 > 解决方案 > 使用reduce和promise在数组中顺序执行函数

问题描述

我有一系列函数

var functionArray = [function1, function2, function3];

函数看起来像这样。都是一样的

var function2 = (value, callback) => {
    setTimeout(() => {
        value++;
        callback(null, value);
    }, 2000);
}

我想使用reduceand顺序执行这些功能promises。但是下面的代码不起作用。我无法理解它。

var wrapper = (functionName, value) => {

    return new Promise((resolve, reject) => {
        functionName(value, (error, returnedValue) => {
            console.log(returnedValue);
            resolve(returnedValue);
        });
    });
}

var execute = function () {
    return functionArray.reduce((promise, currentFunction) => {
        return promise.then((value = 10) => {
            wrapper(currentFunction, value);
        });
    }, Promise.resolve());
};

当我调用execute值 11 时,会立即打印 3 次。我在这里错过了什么吗?

现场片段:

var function1 = (value, callback) => {
    setTimeout(() => {
        value++;
        callback(null, value);
    }, 2000);
}
var function2 = (value, callback) => {
    setTimeout(() => {
        value++;
        callback(null, value);
    }, 2000);
}
var function3 = (value, callback) => {
    setTimeout(() => {
        value++;
        callback(null, value);
    }, 2000);
}

var wrapper = (functionName, value) => {

    return new Promise((resolve, reject) => {
        functionName(value, (error, returnedValue) => {
            console.log(returnedValue);
            resolve(returnedValue);
        });
    });
}

var execute = function () {
    return functionArray.reduce((promise, currentFunction) => {
        return promise.then((value = 10) => {
            wrapper(currentFunction, value);
        });
    }, Promise.resolve());
};

var functionArray = [function1, function2, function3];
execute();

标签: javascriptpromise

解决方案


the return values are not correct.

Parameter is always 10.

  return wrapper(currentFunction, value, timeout);

See:

https://jsfiddle.net/js1n6xL3/3/

Maybe this can help you too: https://gist.github.com/anvk/5602ec398e4fdc521e2bf9940fd90f84


推荐阅读