龙空技术网

不懂TS?不懂JS异步?一文详解新前端V8时代的JS异步机制-Promise

Puwon 94

前言:

此刻你们对“这js”都比较重视,各位老铁们都需要知道一些“这js”的相关内容。那么小编也在网上搜集了一些关于“这js””的相关知识,希望小伙伴们能喜欢,兄弟们快快来学习一下吧!

Javascript 是解释性脚本语言,语法会逐行执行,这就意味着遇到耗时的请求,只能卡在那里直到返回,这时候JS的异步机制来了。

Promise 解释

从关键字的意义可见,Promise--承诺,所以无论成功与否,都会给你一个答复。

看看定义:

let promise = new Promise(function(resolve, reject) {  // executor(生产者代码)});

这里面包括了 “生产者”、“消费者“和“Promise”,Promise负责把生产者和消费者连接起来。

定义

Promise的参数函数 function(resolve,reject){} 就是 执行器executor,new后executor会自动执行,像极了构造函数,当executor成功后会自动回调 resolve,失败了会自动回调 reject,就这么简单。

整个过程中,状态流转如下(状态属于内部属性,代码中无法使用):

状态流转

在一个 executor 中,只能调用一次 reject 或者 resolve,存在多次调用时,后面的会被忽略。

调用 reject 时,建议使用对象 Error ,这样会更明显看出来是发生了错误

在消费者调用时,如何接收 executor 返回呢?

接收返回(成功/失败)

let promise = new Promise(function(resolve, reject) {  // executor(生产者代码)});promise.then(  function(sucess){}, // 接收成功返回的消息  function(error){} // 接收错误返回的消息)

可见,

如果消费者只对成功返回感兴趣,可以只定义第一个函数;

如果消费者只对失败返回感兴趣,可以把第一个函数定义成 null,或者采用以下方式:

// 第一种方式promise.then(  null, // 接收成功返回的消息  function(error){} // 接收错误返回的消息);// 第二种方式promise.catch(function(error){})

还有一种情况,我们对返回都不感兴趣,只要执行完就执行一段代码,还可以使用 finally,如下:

// finally 没有参数,这个要切记,所以是否成功在 finally 内并不知道promise.finally(function(){})
链式

还支持链式调用,如下:

promise.then(  function(sucess){}, // 接收成功返回的消息  function(error){} // 接收错误返回的消息).then(  function(sucess){},  function(error){}).then(  function(sucess){},  function(error){})

链式调用

最后

Promise在现在前端代码中,还是比较常见的,希望多应用。

标签: #这js