使用等待读取异步对象集

问题描述 投票:-2回答:2

使用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;
})();
javascript async-await ecmascript-2017
2个回答
-2
投票

您必须以某种方式等待。选项包括等待设置:

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;
})();

-2
投票

您应该等待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

© www.soinside.com 2019 - 2024. All rights reserved.