我试图隐藏一些进行计算的代码的延迟。
以下示例。在下面的第一种情况中,我得到了预期的答案:
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();