gpt4 book ai didi

javascript - 异步/等待 promise 未决错误

转载 作者:搜寻专家 更新时间:2023-11-01 00:12:24 25 4
gpt4 key购买 nike

我在处理 promise 时遇到了一些错误。所以最初我的功能是这样设置的,一切正常,没有问题。

原文:

const request = require("request-promise");
async () => {
const URL_HIDDEN = "...";

let info = await request(URL_HIDDEN);
info = JSON.parse(info).response.players[0];

let playtime = await request(URL_HIDDEN);
playtime = JSON.parse(playtime).response.games;

console.log(info);
console.log(playtime);
}

这是一个简化版本,但基本上我只是从 Steam API 请求信息。这两个变量都可以打印出所有数据,没问题,但是一旦我进行了下面的重构,情况就会发生变化。

重构:

const middleware = require("../middleware");
async () => {
const URL_HIDDEN = "...";

let requests = middleware.requestURI(URL_HIDDEN);
console.log(requests);
}

然后我开始在单独的文件中的单独函数中处理所有请求。

const request = require("request-promise");
middlewareObj.requestURI = async (URL_HIDDEN) => {
console.log("1");
let info = await request(URL_HIDDEN);
info = JSON.parse(info).response.players[0];

console.log("2");

let playtime = await request(URL_HIDDEN);
playtime = JSON.parse(playtime).response.games;

console.log("3");

return [{ info }, { playtime }];
};

整理好所有变量后,我想返回一个数组。但是,一旦执行,我就会将其打印到控制台。

1
Promise { <pending> }
2
3

知道为什么它在我重构后打印 promise pending 吗?

在原版中,它打印出一切都很好

最佳答案

在你的“重构”代码中 -

let requests = middleware.requestURI(URL_HIDDEN);

如果没有 awaitrequests 将是一个未决的 promise - 所以,您需要

let requests = await middleware.requestURI(URL_HIDDEN);

对此进行扩展。任何标记为 async 的函数都会返回一个 Promise。

async function foo() {
return true;
}

这样调用

let bar = foo();
// here bar = pending promise of foo()

结果 bar 是 Promise

像这样调用它

let bar = await foo(); 
// here bar == true

有点等同于(但远不等同于)

foo().then(bar => {
// here bar == true
})

async/await 可以让已经被 Promise 简化的代码变得更简单——在这个人为的例子中,它并不明显

关于javascript - 异步/等待 promise 未决错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45608525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com