Promise基本用法

const promise = new Promise(function (resolve, reject) {
  // 用于兑现承诺
  // resolve(100) // 承诺达成
  reject(new Error('promise reject')) // 承诺失败
})
promise.then(function (value) {
  console.log('resolved', value)
}, function (error) {
  console.log('rejected', error)
})
console.log('end')
// 执行结果如下:
end
01-promise-sample.js:9 rejected Error: promise reject
    at 01-promise-sample.js:4
    at new Promise (<anonymous>)
    at Object.<anonymous> (01-promise-sample.js:1)
    at __webpack_require__ (bootstrap:19)
    at Object.<anonymous> (bootstrap:83)
    at __webpack_require__ (bootstrap:19)
    at bootstrap:83
    at bootstrap:83

Promise的本质也就是使用回调函数的方式去定义异步任务结束之后所需要执行的任务。嵌套使用方式是使用Promise最常见的错误,正确的做法是借助于Promise then方式链式调用的特点,尽量保证异步任务的扁平化。

Promise对象的then方法会返回一个全新的Promise对象。
后面的then方法就是在为上一个then返回的Promise注册回调。
前面then方法中回调函数的返回值会作为后面then方法回调的参数。
如果回调中返回的是Promise对象,那后面的then方法的回调会等待它的结束。

Promise静态方法:

// Promise.resolve() 把一个值转换成一个promise对象
let promise = new Promise((resolve,reject)=>{resolve('boo')})
Promise.resolve(promise) === promise // true
Promise.resolve('boo') === promise // false

Promise.resolve({
    then:(onFlfilled, onejection)=>{
        onFlfilled('foo')
    }
}).then(value=>console.log(value)) // foo
//这样的一个对象也可以作为一个promise对象被执行,在后面的then方法也可以拿到对应的值
//带有then方法的对象可以说实现了一个叫做thenable的接口,也就是这是一个可以被then的对象,支持的原因在原生promise对象还没有普及之前,很多时候都是实用第三方库实现的promise,如果说要把第三方的promise对象转换成原生的Promise对象,就可以借助这样的机制,因为在第三方Promise对象中也有相同的then方法
//Promise.reject()
Promise.reject(new Error('rejected'))
.catch(function(error){
    console.log(error)
})
// Promise.all([])  // 等待所有Promise的任务结束
// Promise.race([]) // 等待第一个Promise的任务结束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值