async 函数错误处理

浏览: 17 2019年10月12日
如果await后面的异步操作出错,那么等同于async函数返回的 Promise 对象被reject。async function f() { await new Promise(function (resolve, reject) { throw new Error('出错了'); ...

await 命令

浏览: 19 2019年10月11日
正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。async function f() { // 等同于 // return 123; return await 123;}f().then(v => conso...

async函数Promise 对象的状态变化

浏览: 52 2019年09月28日
async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。也就是说,只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。下面是一个例子。async function...

async函数返回 Promise 对象

浏览: 57 2019年09月27日
返回 Promise 对象async函数返回一个 Promise 对象。async函数内部return语句返回的值,会成为then方法回调函数的参数。async function f() { return 'hello world';}f().then(v => console.log(v))...

async 函数的基本用法

浏览: 72 2019年09月25日
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。下面是一个例子。async function getStockPriceByName(name) { const sy...

async 函数的含义

浏览: 58 2019年09月24日
含义ES2017 标准引入了 async 函数,使得异步操作变得更加方便。async 函数是什么?一句话,它就是 Generator 函数的语法糖。前文有一个 Generator 函数,依次读取两个文件。const fs = require('fs');const readFile = func...

实例:处理 Stream

浏览: 67 2019年09月23日
Node 提供 Stream 模式读写数据,特点是一次只处理数据的一部分,数据分成一块块依次处理,就好像“数据流”一样。这对于处理大规模数据非常有利。Stream 模式使用 EventEmitter API,会释放三个事件。data事件:下一块数据块已经准备好了。end事件:整个“数据流”处理完...

co 模块处理并发的异步操作

浏览: 69 2019年09月20日
co 支持并发的异步操作,即允许某些操作同时进行,等到它们全部完成,才进行下一步。这时,要把并发的操作都放在数组或对象里面,跟在yield语句后面。// 数组的写法co(function* () { var res = yield [ Promise.resolve(1), Pro...

co 模块的源码

浏览: 77 2019年09月19日
co 就是上面那个自动执行器的扩展,它的源码只有几十行,非常简单。首先,co 函数接受 Generator 函数作为参数,返回一个 Promise 对象。function co(gen) { var ctx = this; return new Promise(function(resolv...

基于 Promise 对象的自动执行

浏览: 82 2019年09月18日
还是沿用上面的例子。首先,把fs模块的readFile方法包装成一个 Promise 对象var fs = require('fs');var readFile = function (fileName){ return new Promise(function (resolve, rejec...

co 模块的原理

浏览: 66 2019年09月17日
为什么 co 可以自动执行 Generator 函数?前面说过,Generator 就是一个异步操作的容器。它的自动执行需要一种机制,当异步操作有了结果,能够自动交回执行权。两种方法可以做到这一点。(1)回调函数。将异步操作包装成 Thunk 函数,在回调函数里面交回执行权。(2)Promise...

co 模块基本用法

浏览: 85 2019年09月16日
基本用法co 模块是著名程序员 TJ Holowaychuk 于 2013 年 6 月发布的一个小工具,用于 Generator 函数的自动执行。下面是一个 Generator 函数,用于依次读取两个文件。var gen = function* () { var f1 = yield read...

Thunk 函数的自动流程管理

浏览: 88 2019年09月12日
Thunk 函数真正的威力,在于可以自动执行 Generator 函数。下面就是一个基于 Thunk 函数的 Generator 执行器.function run(fn) { var gen = fn(); function next(err, data) { var result =...

Generator 函数的流程管理

浏览: 93 2019年09月11日
你可能会问, Thunk 函数有什么用?回答是以前确实没什么用,但是 ES6 有了 Generator 函数,Thunk 函数现在可以用于 Generator 函数的自动流程管理。Generator 函数可以自动执行。function* gen() { // ...}var g = gen()...

Thunkify 模块

浏览: 91 2019年09月09日
生产环境的转换器,建议使用 Thunkify 模块。首先是安装。$ npm install thunkify使用方式如下。var thunkify = require('thunkify');var fs = require('fs');var read = thunkify(fs.readFi...

JavaScript 语言的 Thunk 函数

浏览: 101 2019年09月05日
JavaScript 语言是传值调用,它的 Thunk 函数含义有所不同。在 JavaScript 语言中,Thunk 函数替换的不是表达式,而是多参数函数,将其替换成一个只接受回调函数作为参数的单参数函数。// 正常版本的readFile(多参数版本)fs.readFile(fileName,...

Thunk 函数的含义

浏览: 122 2019年09月04日
编译器的“传名调用”实现,往往是将参数放到一个临时函数之中,再将这个临时函数传入函数体。这个临时函数就叫做 Thunk 函数。function f(m) { return m * 2;}f(x + 5);// 等同于var thunk = function () { return x + 5...

Thunk 函数参数的求值策略

浏览: 108 2019年09月03日
Thunk 函数是自动执行 Generator 函数的一种方法。参数的求值策略Thunk 函数早在上个世纪 60 年代就诞生了。那时,编程语言刚刚起步,计算机学家还在研究,编译器怎么写比较好。一个争论的焦点是"求值策略",即函数的参数到底应该何时求值。var x = 1;function f(m...

Generator 函数异步任务的封装

浏览: 96 2019年09月02日
下面看看如何使用 Generator 函数,执行一个真实的异步任务。var fetch = require('node-fetch');function* gen(){ var url = 'https://api.github.com/users/github'; var result =...

Generator函数的数据交换和错误处理

浏览: 118 2019年08月30日
Generator 函数可以暂停执行和恢复执行,这是它能封装异步任务的根本原因。除此之外,它还有两个特性,使它可以作为异步编程的完整解决方案:函数体内外的数据交换和错误处理机制。next返回值的 value 属性,是 Generator 函数向外输出数据;next方法还可以接受参数,向 Gene...