0

我有一个来自 NodeJs 的“请求”请求,我想通过一个承诺来获取数据。一切都很好,因为控制台向我显示了我被请求的信息。问题是当我调用 promise 函数时,控制台会显示这个。我怎样才能得到真正的价值?

let leagueTier = (accId) => new Promise(async (resolve, reject) => {
            request({
                url: `https://${reg}.api.riotgames.com/lol/league/v4/entries/by-summoner/${accId}${key}`,
                json: true
            }, (error, response, body) => {
                if (!error && response.statusCode === 200) {
                    resolve(body[0].tier.toLowerCase())
                } else {
                    reject(Error('It broke'))
                }
            })
        }).then(function(res) {
            return res;
        })

这是我调用函数的地方

.attachFiles([`./images/${leagueTier(body.id)}.png`])

(node:5868) UnhandledPromiseRejectionWarning: E​​rror: ENOENT: no such file or directory, stat 'D:\Dev\shen-bot\images[object Promise].png'

如何访问我提出的请求的字符串?也许我不应该使用承诺?

4

1 回答 1

0

返回值将是一个最终解决或拒绝为值的leagueTier承诺。您不能简单地将返回值添加为字符串的一部分。您可以使用awaitthen等待该值通过。

// asuming you are in async function context
.attachFiles([`./images/${await leagueTier(body.id)}.png`]);

// or
leagueTier(body.id).then(tier => {
  .attachFiles([`./images/${tier}.png`]);
});

请注意,您当前的代码:

.then(function(res) {
  return res;
})

绝对什么都不做,可以省略。

于 2020-07-19T19:58:17.197 回答