promise常用使用方法

Promise

Promise 对象用于表示一个异步操作的最终完成 (或失败), 及其结果值.

语法

new Promise( function(resolve, reject) {...} /* executor */  );

executor是带有 resolve 和 reject 两个参数的函数 。

描述

Promise 对象是一个代理对象(代理一个值),被代理的值在Promise对象创建时可能是未知的。它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。 这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的promise对象。
主要有以下几种状态:
pending:初始状态,既不成功,也不是失败,
fulFilled:成功,
rejected:失败,

属性

Promise.length:length属性,其值总是为 1 (构造器参数的数目)。
Promise.prototype:表示 Promise 构造器的原型。

方法

Promise.all(iterable)

promise.all(iterate)方法返回一个Promise实例,当iterate中所有参数都完成才会回调,如果失败是返回第一个失败的原因;(iterable:一个可迭代的对象,如array,string)

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
// [3, 42, "foo"]
说明:在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组,
它包含所有的传入迭代参数对象的值(也包括非 promise 值)。
Promise.race(reason)

Promise.race(iterable):返回一个promise,一旦迭代器中的某个promise解决或则拒绝,返回的promise就会解决或者拒绝。

var promise1 = new Promise(function(resolve, reject) {
   setTimeout(resolve, 500, 'one');
});
var promise2 = new Promise(function(resolve, reject) {
   setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then(function(value) {
 console.log(value)
});
//  "two"
Promise.reject(reason)

Promise.reject(reason)方法返回一个带有拒绝原因reason参数的Promise对象
reason:表示被拒绝的原因

Promise.reject("Testing static reject").then(function(reason) {
 // 未被调用
}, function(reason) {
 console.log(reason); // "Testing static reject"
});

Promise.reject(new Error("fail")).then(function(result) {
 // 未被调用
}, function(error) {
 console.log(error); // stacktrace
});
Promise.resolve(value)

Promise.resolve(value)方法返回一个以给定值解析后的Promise对象。如果该值为promise,返回这个promise;如果这个值是thenable(即带有"then" 方法)),返回的promise会“跟随”这个thenable的对象,采用它的最终状态;否则返回的promise将以此值完成。

var promise1 = Promise.resolve(123);
promise1.then(function(value) {
 console.log(value);//123
});

数组
var p = Promise.resolve([1,2,3]);
p.then(function(v) {
 console.log(v[0]); // 1
});
Promise 链式操作
1链式catch方法
var p1 = new Promise(function(resolve, reject) {
 resolve('Success');
})
p1.then(function(value) {
 console.log(value); // "Success!"
 throw 'oh, no!';
}).catch(function(e) {
 console.log(e); // "oh, no!"
}).then(function(){
 console.log('after a catch the chain is restored');
}, function () {
 console.log('Not fired due to the catch');
})

捕获抛出的错误
var p1 = new Promise(function(resolve, reject) {
 throw 'Uh-oh!';
});
p1.catch(function(e) {
 console.log(e); // "Uh-oh!"
});
2finally()

finally() 虽然与 .then(onFinally, onFinally) 类似,它们不同的是:
Promise.resolve(2).then(() => {}, () => {}) //结果是undefind
Promise.reject(2).then(() => {}, () => {})//结果是undefind
Promise.resolve(2).finally(() => {})//结果是2
Promise.reject(2).then(() => {}, () => {})//结果是2

链式三个一起应用
let isLoading = true;
fetch(myRequest).then(function(response) {
    var contentType = response.headers.get("content-type");
    if(contentType && contentType.includes("application/json")) {
      return response.json();
    }
    throw new TypeError("Oops, we haven't got JSON!");
  })
  .then(function(json) { /* process your JSON further */ })
  .catch(function(error) { console.log(error); })
  .finally(function() { isLoading = false; });
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值