使用thing
在异步函数setter();
中设置全局对象的键/值(await
)。如何在另一个异步函数thing
中异步读取getter();
的值?
由于getter();
在await
中的setter();
完成之前正在运行,所以我得到了未定义的错误。
let obj = {};
async function af() {
return 1;
}
(async function setter () {
obj.thing = await af();
})();
(async function getter () {
let thing = obj.thing;
})();
您必须以某种方式等待。选项包括等待设置:
let obj = {};
let setPromise = (async function setter () {
obj.thing = await af();
})();
(async function getter () {
await setPromise;
let thing = obj.thing;
})();
或将可解决该问题的承诺存储在某处:
let obj = {};
let setPromise = (async function setter () {
obj.thingPromise = af();
obj.thing = await obj.thingPromise;
})();
(async function getter () {
let thing = await obj.thingPromise;
})();
您应该等待setter函数完成,这种方法会导致竞争状况问题。
将如何工作的示例是:
var obj = {};
async function af() {
return 1;
}
(async function() {
await (async function setter () {
obj.thing = await af();
})();
await (async function getter () {
let thing = obj.thing;
})();
console.log(obj.thing);
})();
在函数末尾,应该记录从af函数返回的1