如何在NodeJS的'Promise'子句中使用'finally'?

问题描述 投票:1回答:2

我想要这样的东西:

let promises = [];
for (let i = 0; i < some_length; i++) {
    let output = '';
    promises.push(some_func(i)
        .then((result) => {
            output = result;
        })
        .catch((error) => {
            output = error.message;
        })
        .finally(() => {
            console.log(output);
        })
    );
}
return Promise.all(promises);

但我得到一个运行时错误.then(...).catch(...).finally is not a function

知道如何解决这个问题吗?

谢谢。

node.js promise try-catch-finally
2个回答
1
投票

节点10最终添加了对它的支持。使用节点10.7.0进行测试。

Promise.resolve().finally(() => {
    console.log("It finally works!")
})

它终于奏效了!

(Chrome和Firefox也支持它。)


0
投票

实际上,我认为你的some-func函数不返回Promise,返回JavaScript Promisees thencatchfinally有意义,所以我认为你必须声明some_func函数作为new对象的Promise实例,见下面的代码:

let promises = [];
for (let i = 0; i < some_length; i++) {
    let output = '';
    let some_func = (i) => {
       return new Promise(function(resolve, reject) {
            setTimeout(resolve(`success: ${i}`), 100, 'foo');
       });
    }
    promises.push(some_func(i)
        .then((result) => {
            output = result;
        })
        .catch((error) => {
            output = error.message;
        })
        .finally(() => {
            console.log(output);
        })
    );
}
return Promise.all(promises);

也许这段代码有一些其他的错误,我不知道,因为我没有测试它,但毫无疑问你的错误就像我在上面的句子中说的那样。

© www.soinside.com 2019 - 2024. All rights reserved.