Coinbase API 响应大且速度慢

Coinbase API large responses and slow

以下代码需要 5 到 10 秒才能解析(有 5 个 API 调用)。它不能按原样使用。反应慢是我的错还是 Coinbase API 只是又慢又大?

app.get('/buys', async (req, res) => {
    const buys = await getAllBuys()
    res.json(buys)
})

const fetchAllAccounts = () => {
    return new Promise(
        (resolve, reject) => {
            coinbase.getAccounts(null, (err, accounts) => {
                if (err) {
                    reject(err)
                }
                else{
                    resolve(accounts)
                }
            })
        }
    )
}

const fetchAllBuys = (account) => {

    return new Promise(
        (resolve, reject) => {
            account.getBuys(null, (err, buys) => {
                if (err) {
                    reject(err)
                }
                else{
                    resolve(buys)
                }
            })
        }
    )
}


const getAllBuys = async () => {
    const accounts = await fetchAllAccounts()

    let combinedBuys = []

    for (let account of accounts) {
        const buys = await fetchAllBuys(account)
        combinedBuys = [...combinedBuys, ...buys]
    }
    //console.log(combinedBuys)
    return combinedBuys
}

Response 是一个数组,其中的项目包括证书等帐户信息。

好的,这就是我的代码。在上面的代码中,我等待每个请求完成,然后再触发一个新请求。这导致不必要的延迟。使用 Promise.all 方法,我们可以生成所有的承诺并同时解决它们。看看下面重构的代码。

app.get('/buys', async (req, res) => {
    console.time('[/buys]');

    const promises = await getAllBuys()
    const buys = await Promise.all(promises)
    res.json(buys)

    console.timeEnd('[/buys]');
})


const fetchAllAccounts = () => {
    return new Promise(
        (resolve, reject) => {
            coinbase.getAccounts(null, (err, accounts) => {
                if (err) {
                    reject(err)
                }
                else{
                    resolve(accounts)
                }
            })
        }
    )
}

const fetchAllBuys = (account) => {

    return new Promise(
        (resolve, reject) => {
            account.getBuys(null, (err, buys) => {
                if (err) {
                    reject(err)
                }
                else{
                    resolve(buys)
                }
            })
        }
    )
}


const getAllBuys = async () => {
    const accounts = await fetchAllAccounts()

    let promises = []

    for (let account of accounts) {
        promises.push(fetchAllBuys(account))
    }
    return promises
}

从 2,5 / 3 秒到 0,8 / 1 秒。