Node.js里的Promise无法在if语句中解决(resolve)。

3

需要一些关于Promise的帮助,为什么resolve不能在这个if语句中工作?

async getTrades() {
    return new Promise(function (resolve, reject) {
        if (this.exchange === 'GDAX') {
            resolve('fake')
            console.log('inside GDAX')
        }
    }.bind(this))
}

如果我把解决方案放在if语句之外(之前或之后),它就可以工作。而且console.log('inside GDAX')确实触发了,所以this.exchange ==='GDAX'返回true。

这是调用它的函数:

getHistoricalPortfolioReturn() {
    return new Promise(function (resolve, reject) {
        var exchange_trades_calls = []
        for (var exchange_account in this.exchange_accounts) {
            if (this.exchange_accounts.hasOwnProperty(exchange_account)) {
                exchange_trades_calls.push(this.exchange_accounts[exchange_account].getTrades())
            }
        }
        Promise.all(exchange_trades_calls)
        .then(function (trades) {
            console.log('resolved')
            console.log('trades: ' + trades)
            resolve(trades)
        })
        .catch(function (error) {
            console.error('error: ' + error)
        })
    }.bind(this))
}

1
我认为你只需要交换 resolve('fake')console.log 的顺序。 - Jaydip Jadhav
我尝试过了,也尝试过删除console.log,但仍然没有任何反应!我都快抓狂了,可能只是一些简单的问题。 - JBaczuk
你怎么知道它没有解决?你是否已经使用 then 进行链接? - Andrew Li
@Li357 刚刚发布了调用它的函数。如果我将 resolve 函数放在 if 语句外面,它就能解决问题,但我认为这并不重要。 - JBaczuk
1个回答

4

您正在使用 async 函数。您不需要返回一个 promise,因为它会自动包装在一个 promise 中。

async getTrades() {
    if(this.exchange === 'GDAX')  return "fake";
}

你正在解决错误的承诺。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接