javascript之promise

promise相当于一个代理,表示一个异步操作成功或失败的结果,即使不能立马获得promise表示的值,但可以为promise附上成功或失败的回调函数。

例子

function myAsyncFunction(url) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.onload = () => resolve(xhr.responseText);
    xhr.onerror = () => reject(xhr.statusText);
    xhr.send();
  });
}

myAsyncFunction函数返回一个promise,它代表xhr异步请求后的结果。在promise对象被创建后,它的executor函数(第一个参数)会立马被执行。因为这是异步请求,因此不能立马获得结果。但你可以附上处理函数,一般产生结果或失败时执行,如:

myAsyncFunction("localhost/api/get")
.then(function(successData){
    console.log(succssData);
})
.catch(function(failueData){
    console.log(failueData);
});

当promise的executor函数中的异步结果出现后,即执行了resolve(data),data为promise的结果,会执行then的第一个参数(函数),来处理成功的结果。

myAsyncFunction函数中执行了reject(data)或抛出异常时,会执行then的第二个参数(函数),来处理异步操作的错误。.catch(onRejected)then.(undefined,onRejected)的简写。

Promise

new Promise(executor)

当promise被创建时,executor函数会被立刻执行,executor函数将被传入resolvereject方法。当executor中的异步操作结束后,需要调用resolvereject方法表示成功或失败。一旦被调用,通过then方法附着在promise上的处理器会被调用。这两个函数执行时传入的参数会被处理器接收。

then

p.then(onFulfilled[, onRejected]);

p.then((value) => {
  // fulfillment
}, (reason) => {
  // rejection
});

参数:

  • onFulfilled:promise的executor执行resolve后执行该处理器。方法的参数为resolve执行时传入的参数。
  • onRejected;promise的executor执行reject后(或抛出异常)执行该处理器。方法的参数为reject执行时传入的参数(或异常)。

返回值:

返回一个promise对象,因此可以链式使用then方法。但此时先搞懂promise代表什么值,当处理器:

  • 返回一个值时,promise表示该值

  • 不返回值时,promise表示undefined

  • 抛出异常时,promise表示失败了(reject)

  • 返回promise,该promise的最终结果,就是then返回的promise的最终结果。

貌似一个失败了(reject)的promise不被then的处理器处理时(即onRejected不存在),会继续传给下一个。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值