美文网首页
JS之异步编程方法

JS之异步编程方法

作者: sarah_wqq | 来源:发表于2019-01-25 11:57 被阅读0次

异步方法有:回调函数、事件监听、发布订阅(观察者模式)、Promise对象、Generator、Async/Await

1. 回调函数

参考setTimeout的原理
容易造成回调地狱(callback hell)

2. 发布订阅

即Publish/Subscribe,发布、订阅模式(也称观察者模式)。常见的有jQuery的自定义事件监听、Node的EventEmitter对象等。
比如在Dom上绑定click事件,相当于订阅了元素的click事件,当元素被点击的时候,他就向订阅者发布这个消息。

很多框架也提供PubSub的类来实现发布订阅模式

3.Promise

JavaScript从ES6开始支持Promise。
Promise是一个特殊的对象,它可以表示异步操作的成功或者失败,同时返回异步操作的执行结果,具有pending, rejected, resolved三种状态。

// 当一切正常时,调用resolve函数;否则调用reject函数
var promise = new Promise(function(resolve, reject){
    if ( /* everything turned out fine */ ){
        resolve("Stuff worked!");
    }else{
        reject(Error("It broke"));
    }
});

Promise使用then将函数链接起来

function levelOne(value){
    var promise, newScore = value + 5;
    return promise = new Promise(function(resolve){
        resolve(newScore);
    });
}
...
startGame.then(levelOne)
    .then(function(result){
        // result为levelOne函数的返回值
        return result;
    })
    .then(levelTwo)
    .then(function(result){
        return result;
    })
    .then(levelThree)
    .then(function(result){
         ...
    });

相比传统回调函数而言,Promise代码可读性更高,代码的执行顺序一目了然,但是它的本质还是回调函数。

promise有一个局限就是不能够中止promise链
例如当promise链中某一个环节出现错误之后,已经没有了继续往下执行的必要性,但是promise并没有提供原生的取消的方式,即使在前面已经抛出异常,但是promise链并不会停止。虽然我们可以利用返回一个处于pending状态的promise来中止promise链。

4.Generator

Generator 和 async/await 使用同步的写法来处理异步,明显好于 callback 和 promise,async/await 在语义化上又要比 generator 更强。

5.Async/Await

JavaScript从ES8(即ECMAScript 2017]开始支持Async/Await
本质上,Async/Await只是基于Promise的语法糖,它让我们可以使用同步的方式写异步代码,提高异步代码的可读性,真正抛弃了回调函数。

//同样创建一个Promise对象
function levelOne(value){
    var promise, newScore = value + 5;
    return promise = new Promise(function(resolve){
        resolve(newScore);
    });
}
...
//await 只在 async中使用
async function startGame()
{
    var currentScore = 5;
    currentScore = await levelOne(currentScore);
    currentScore = await levelTwo(currentScore);
    currentScore = await levelThree(currentScore);
}

相关文章

  • 异步_ promise

    阮一峰 js的4种异步编程方法其他的一些异步编程方法 js 异步编程方法 一,回调函数 假定有两个函数f1和f2...

  • JS之异步编程方法

    异步方法有:回调函数、事件监听、发布订阅(观察者模式)、Promise对象、Generator、Async/Awa...

  • JS异步编程最佳实现方法 (附:异步方法如何循环调用)

    目前来说,JS实现异步编程的最好方法还是: ①. Promise , ②. aysnc await方法 基本原则:...

  • 1-1作业参考答案

    模块一:函数式编程与 JS 异步编程、手写 Promise参考答案 简答题 一、谈谈你是如何理解 JS 异步编程的...

  • JavaScript异步编程好文摘要

    JavaScript之异步编程简述JavaScript异步编程

  • ES6 promise理解

    一、promise 是什么 1、Promise 是 JS 中解决异步编程的一种方案。 拓展:js中解决异步编程的...

  • 几种js异步编程方法

    前言 JS需要异步处理的地方实在是比较多,比如定时器/ajax/io操作等等,在当今前端技术日新月异的情况下,异步...

  • 深入了解下Promise

    Promise 意义 Promise 的诞生与 Javascript 中异步编程息息相关,js 中异步编程主要指 ...

  • 01node.js

    01、模块 02、关注学习 03、Node.js 回调函数Node.js 异步编程的直接体现就是回调。异步编程依托...

  • 04-Node 异步编程

    Node 异步编程同步方法和异步方法异步 API 的执行顺序异步编程回调地狱问题Promise 改造回调地狱代码a...

网友评论

      本文标题:JS之异步编程方法

      本文链接:https://www.haomeiwen.com/subject/nmzcjqtx.html