JS中的Promise是什么?

191 阅读1分钟

Promise

promise是什么?

Promise异步编程的一种解决方案,解决了回调地狱的问题。有了Promise对象,就可以将异步操作以同步操作的流程表达出来。

特点

  • 对象的状态不受外界影响。有三种状态:pending(进行中)、fulfilled(已成功)和rejected(以失败)
  • 一旦状态改变,就不会再变

缺点

  • 无法取消Promise,一旦新建他就会立即执行,无法中途取消。
  • 如果不设置回调函数,Promise内部跑出的错误无法反应到外部
  • 当pending的时候,无法知道进展到了哪一步

promise的链式调用

promise.then()promise.catch() promise.finally()这些方法还会返回一个新生成的 promise 对象 Promise.all Promise.race

demo

let promise = new Promise(function(resolve, reject) {
    console.log('Promise')
    resolve()
})
promise.then(function() {
    console.log('resolved')
})
console.log('Hi')
//Promise
//Hi
//resolved
// 备注:
// resolve 触发后续then的回调
// reject  触发后续catch的回调

promise立即执行,首先输出Promise。promise.then是一个微任务,会放到微任务队列里。先执行同步任务,所以输出Hi,最后输出resolved

async/await 同步写法

使用await函数必须使用async标识,await后面必须跟一个promise实例,同步写法解决.then异步问题,再也没有回调

  • 执行async函数返回的是Promise对象
  • await相当于Promisethen
  • try...catch 可捕获异常,代替了Promisecatch