使用 Await 读取异步对象集

Posted

技术标签:

【中文标题】使用 Await 读取异步对象集【英文标题】:Read Async Object Set Using Await 【发布时间】:2020-02-11 11:53:07 【问题描述】:

全局对象的键/值 (thing) 使用 await 在异步函数 setter(); 中设置。如何在另一个异步函数getter();中异步读取thing的值?

我收到未定义的错误,因为 getter();setter(); 中的 await 完成之前运行。

let obj = ;

async function af() 
    return 1;


(async function setter () 
  obj.thing = await af();
)();

(async function getter () 
  let thing = obj.thing;
)();

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于使用 Await 读取异步对象集的主要内容,如果未能解决你的问题,请参考以下文章

异步/等待仅在读取文件时才是有效的异步函数[重复]

异步读取图像文件

对fs异步读取文件的理解

使用像素缓冲区对象从 gpu 异步读取数据

使用异步管道从可观察对象中读取对象字段

JavaScript异步(必考三座大山之三)——第四集:async-await