Promise

Promise

异步操作的同步表现形式

优点

1.解决回调地狱(Callback Hell)问题

2.由于栈信息不同 无法try catch return throw。解决无法捕获异常或异常捕获不可控

简介

Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。其实这里用“成功”和“失败”来描述并不准确,按照标准来讲,resolve是将Promise的状态置为fullfiled,reject是将Promise的状态置为rejected。

Promise的优势在于,可以在then方法中继续写Promise对象并返回,然后继续调用then来进行回调操作。

Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够及时调用,它比传递callback函数要简单、灵活的多


2,4,3,1

然后回到开头的代码。因为settimeout是宏任务,虽然先执行的他,但是他被放到了宏任务的eventqueue里面,然后代码继续往下检查看有没有微任务,检测到Promise的then函数把他放入了微任务序列。等到主线进程的所有代码执行结束后。先从微任务queue里拿回掉函数,然后微任务queue空了后再从宏任务的queue拿函数。

宏任务一般是:包括整体代码script,setTimeout,setInterval。

微任务:Promise,process.nextTick。

Promise是什么

 按照用途解释:

1.主要用于异步计算

 2.可以将一步操作队列化,按照期望的顺序执行,返回符合预期的结果

3.可以在对象之间传递和操作Promise,帮助我们处理队列

Promise产生的原因:

1.js为检查表单而生

2.创造它的首要目标是为了操作DOM

3.所以js很多操作都是异步的

异步回调的缺点:

1.原函数与异步回调函数在不同栈内运行,异步回调函数无法获取原函数栈的信息,原函数也无法捕获异步回调函数抛出的错误。异步回调无法正常使用try catch(无法正常检索堆栈信息)

2.由于异步,我们可能无法判断何时完成的,所以在高级作用域/外层作用域声明很多变量以便于内层修改,这些变量有可能被其他的函数访问和修改,最终出现错误

3.嵌套层次很深

4.无法正常使用return和throw

5.多个回调之间无法建立联系


function MyPromise (fn) {

console.info('1');

let self = this;

// 用来保存 then 传入的回调函数

this.callback = u = undefined;

console.info('2');

function resolve (val) {

console.info('3');

setTimeout(function(){

console.info('执行callback');

self.callback && self.callback(val);

})

console.info('4');

return self;

}

console.info('5');

fn(resolve);

console.info('6');

}

MyPromise.prototype.then = f = function (next) {

console.info('7');

this.callback = next;

console.info('8');

};

let a = new MyPromise((resolve) => {

console.info('9');

resolve('gehehehe')

console.info('10')

}).then((value) => {

console.info('---',value) })


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,727评论 1 56
  • title: promise总结 总结在前 前言 下文类似 Promise#then、Promise#resolv...
    JyLie阅读 12,281评论 1 21
  • 一、Promise的含义 Promise在JavaScript语言中早有实现,ES6将其写进了语言标准,统一了用法...
    Alex灌汤猫阅读 838评论 0 2
  • Prepending(进行时),Resolve(成功了),Reject(失败了),then......等 1.Pr...
    _菩提本无树_阅读 49,176评论 0 21
  • Promise含义 Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更强大。所谓Pr...
    oWSQo阅读 1,092评论 0 4