当前位置: 首页 > 知识库问答 >
问题:

用promise、生成器和Async/Await理解异步控制流

莫振
2023-03-14

为了更好地理解异步控制流,我阅读了几篇stackoverflow文章、博客文章和Nodejs设计模式书。现在,我很容易编写常规回调传递样式(CPS)代码。然而,我试图摆脱这种习惯,提高代码的可读性(或者,避免“回调地狱”)。我的问题是,我似乎把promise生成器异步/await理解为单独的概念以及如何使用它们。但是,我不确定如何利用它们将CPS函数转换为没有嵌套。

const fs = require('fs');
const bluebird = require('bluebird');
const path = require('path');

// promisified fns
const readFile = bluebird.promisify(fs.readFile);
const readStat = bluebird.promisify(fs.stat);

function* tasks() {
    let fileLocation = path.resolve(__dirname, 'package.json');
    yield readFile(fileLocation, 'utf8');
    yield readStat(fileLocation);
}

(async () => {
    const taskRunner = tasks();
    let fileContent = await taskRunner.next().value;
    let fileStat = await taskRunner.next().value;

    console.log(`Content: ${fileContent}`);
    console.log(`Stats: ${fileStat}`);
})();
    null

共有1个答案

窦英武
2023-03-14
(async () => {

    let fileContent = await readFile(fileLocation, 'utf8');
    let fileStat = await readStat(fileLocation);

    console.log(`Content: ${fileContent}`);
    console.log(`Stats: ${fileStat}`);
})();

不需要发电机

生成器用于解释Async/Await的概念,因为它是两者的结合。但是要使用Async/Await函数,就不再需要它们了

 类似资料:
  • 本文向大家介绍详解koa2学习中使用 async 、await、promise解决异步的问题,包括了详解koa2学习中使用 async 、await、promise解决异步的问题的使用技巧和注意事项,需要的朋友参考一下 关键词:async 、await、promise 这三个东西 可以优雅的解决异步问题。在学习koa2的时候遇到了获取数据后再进行模板渲染的异步问题。在查找各种资料后成功的解决了该问

  • MDN文档 异步/等待函数的目的是简化同步使用promise的行为,并对一组promise执行某些行为。正如promise类似于结构化回调一样,async/await类似于组合生成器和promise。 我了解异步/等待、生成器和promise的基本概念。然而,我不完全理解说async/await类似于将生成器和promise结合起来意味着什么。 所以async/wait简化了生成器和promise

  • 最早的的使用异步操作的时候,我们一般会用setTimeout,会出现回掉地狱的情况 setTimeout(()=>{ setTimeout(()=>{ setTimeout(()=>{ console.log('1') },1000) },1000) },1000) ES6中Promise //promise ()=>{ axios.post('/user/

  • 问题内容: 承诺和生成器允许您编写异步代码。我不明白为什么在ECMA脚本6中同时引入了这两种机制。什么时候最好使用Promise?什么时候使用生成器? 问题答案: 这两种技术之间没有对立。它们共存并很好地互补。承诺使您能够获得尚不可用的异步操作的结果。它解决了厄运金字塔问题。所以代替: 你可以写: 但是即使有承诺,您也必须以异步方式编写代码- 您必须始终将回调传递给函数。编写异步代码比同步代码难得

  • 我一直在使用异步生成器,试图创建一个“promise排序”生成器,它接受一系列promise,并按照promise解析或拒绝的顺序逐个生成promise。比如: 有了这样消耗这个发电机的想法: 然而,我注意到,这将达到第二个promise,然后发电机将停止。这似乎是因为拒绝了“第二次”promise。当被拒绝时,在生成器中调用将在生成器中创建异常。 但这是我困惑的根源。我不想在这里创建异常,我只想

  • 问题内容: 我已经在移动应用程序和Web应用程序中使用过ECMAScript 6 和ECMAScript 7功能(由于Babel)。 第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实是很有希望的),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。而且我已经在我的应用程序中使用它们很多次了。 这是我如何实现基本诺言的示例/伪代码- 随