异步/等待 Reactjs

Posted

技术标签:

【中文标题】异步/等待 Reactjs【英文标题】:Async / Await Reactjs 【发布时间】:2019-08-08 22:06:54 【问题描述】:

我正在尝试在我的 react/electron 项目中使用 async/await,但它不是 workink。 我想要的是获取 docker 容器状态列表。 但是 console.log(list) 返回 undefined。

async componentDidMount() 
    let list = await this.getDockerList();
    console.log(list);
  

  async getDockerList() 
    let files = fs.readdirSync('/home/Docker');
    let dockerList = [];
    let index = 0;
    await files.forEach(async function (value, i) 
      await exec('docker ps -a -q --filter=name=' + value + '_web_1 --filter=status=running', (err, stdout) => 
        if (stdout !== '') 
          dockerList[i] =  name: value, status: 1 ;
         else 
          dockerList[i] =  name: value, status: 0 ;
        
        if ((index + 1) === files.length) 
          console.log('returned');
          return dockerList;
        
        index++;
      );
    );
  

有人可以帮帮我吗? :)

【问题讨论】:

两个问题。一个是***.com/questions/37576685/…。另一个是***.com/questions/30763496/…。 我强烈建议使用 dockerode (npmjs.com/package/dockerode) 而不是直接运行命令,使用 exec 时需要考虑很多安全预防措施。甚至还有一个列出容器的例子github.com/apocas/dockerode/blob/master/examples/… 你可以更喜欢这个它可以为你提供充分的帮助 [***.com/questions/44090197/] 【参考方案1】:

您的函数 getDockerList() 不在您的 this 范围内,您可以像这样将您的函数转换为胖箭头函数 getDockerList = async () => ,或者您可以将它绑定到您的构造函数内的函数 this.getDockerList = this.getDockerList.bind(this)

【讨论】:

以上是关于异步/等待 Reactjs的主要内容,如果未能解决你的问题,请参考以下文章

异步函数 - 等待不等待承诺

异步等待不等待完成

在映射下一项之前,异步等待映射不等待异步函数在映射函数内部完成

异步/等待不等待返回值

Javascript异步等待不等待猫鼬等待

JavaScript异步/等待:等待后代码不会继续[重复]