gpt4 book ai didi

javascript - 在不同的位置等待产生不同的结果

转载 作者:行者123 更新时间:2023-12-05 04:38:34 26 4
gpt4 key购买 nike

我试图隐藏一些进行计算的代码的延迟。

示例如下。在下面的第一种情况下,我得到了预期的答案:

async function calculateStuff(thing) {
//do stuff here
return {"a": a, "b": b, "c": c};
}
const data = await calculateStuff(obj); //takes a while
const first = data["a"] //valid data
const second = data["b"] //valid data
const third = data["c"] //valid data

我想通过执行以下任一操作来隐藏 calculateStuff 的延迟,但是这两种方法都使我的变量变为未定义:

async function calculateStuff(thing) {
//do stuff here
return {"a": a, "b": b, "c": c};
}
data = calculateStuff(obj); //takes a while
//...other calculations here...
await data;
const first = data["a"] //undefined
const second = data["b"] //undefined
const third = data["c"] //undefined

同样:

async function calculateStuff(thing) {
//do stuff here
return {"a": a, "b": b, "c": c};
}
data = calculateStuff(obj); //takes a while
//...other calculations here...
const first = await data["a"] //undefined
const second = await data["b"] //undefined
const third = await data["c"] //undefined

我做错了什么?

最佳答案

异步函数将返回一个 Promise。调用 await myAsyncFunction(),将在 Promise 完成后返回 Promise 的值。请注意前面语句中的 return它不会就地改变指针。

例如调用 await data 不会更改 data

您可以通过调用 data = await data 获得您期望的输出。

async function test()
{
return {a: 1, b: 2};
}

async function run()
{
let data = test();
data = await data;
console.log("A", data.a);
}

run();

你也可以使用.then()

async function test()
{
return {a: 1, b: 2};
}

async function run()
{
let data = test();
data.then((out) => {
console.log("A", out.a);
});
}

run();

关于javascript - 在不同的位置等待产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70572090/

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