0

let关于节点中的 Promises,使用(或 var 和 const)定义函数与自己创建函数的主要区别是什么?

let balanceFunc = new Promise(function (resolve, reject) {

    exchange.balance((error, balances) => {
        if (error) reject(error); else resolve(balances);
    });

});

async function test() {
    await balanceFunc.then((result) => {
        console.log(result.MSFT);
    }).catch((error) => {
        console.log(error);
    });
}

test()

对比

function balanceFunc() {
    return new Promise(function (resolve, reject) {

        exchange.balance((error, balances) => {
            if (error) reject(error); else resolve(balances);
        });

    });
}


async function test() {
    await balanceFunc().then((result) => {
        console.log(result.MSFT);
    }).catch((error) => {
        console.log(error);
    });
}

test()

是化妆品之间的唯一区别,还是在某些情况下更可取。如果函数中有多个参数怎么办?

4

1 回答 1

4

不同之处在于,在第一种情况下:

let balanceFunc = new Promise(function (resolve, reject) {

这将创建 Promise 并exchange.balance 在线路运行后立即调用。相反,当您在第二个代码中有一个函数包装器时,Promise 创建和 API 调用将仅在调用该函数时发生。

例如,如果这是针对此模块的消费者的,并且您这样做了:

export const balanceFunc = new Promise(function (resolve, reject) {
  // ...

这将导致在最初加载模块时只exchange.balance调用一次。对于根据调用时间返回不同值的 API,这几乎肯定不是您想要的:相反,使用 的函数版本balanceFunc将在每次调用函数时重新调用 API。

如果您使用的 API 只需要请求一次,那么创建一个 Promise 而不是围绕它包装一个函数就可以了。(当然,您仍然可以将它包装在一个函数中,但您可能希望确保只调用该包装函数一次)

于 2020-11-30T23:47:37.733 回答