Promise 的用途
首先要了解Promise是什么,有什么用,为什么要用它呢
Promise 是什么? 当我们谈到 Promise的时候,都会想起回调,异步这些 其实呢 Promise 是一种来解决异步问题的唯一答案
Promise 用法
return new Promise((resolve,reject) =>{})
可以构造一个Promise对象,构造出来Promise对象含有一个 .then()函数属性,代码中的 resolve和 reject 可以改成任何名字,不影响,但是一般就叫这两个名字 任务成功调用 resolve 任务失败调用 reject
resolve 和 reject 只接受一个参数,并不是.then(success,fail),resolve 会调用 success, reject会调用 fail
Promise.prototype.the 的使用
then() 方法返回一个 Promise。它最多需要有两个参数:Promise 的成功和失败情况的回调函数。
ajax = (method,url,optious)=>{
return new Promise((resolve,reject) =>{
const {success,fail} = optious
const request = new XMLHttpRequest()
request.open(method,url)
request.onreadystatechange = ()=>{
if(request.readystate ===4){
if(request.status < 400){
resolve.call(null,request.response)
}else if(request.status >=400){
reject.call(null,request)
}
}
}
request.send()
})
}
ajax('get','/xxx')
.then(response)=>{},(request)=>{}
Promise.all 的使用
Promise.all 等待所有都完成(或第一个失败)。
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([p1, p2, p3]).then(values => {
console.log(values); // [3, 1337, "foo"]
});
Promise.race 使用
方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝
参数 :可迭代对象,类似Array
返回值: 一个待定的 Promise 只要给定的迭代中的一个promise解决或拒绝,就采用第一个promise的值作为它的值,从而异步地解析或拒绝(一旦堆栈为空)
描述:
race 函数返回一个 Promise,它将与第一个传递的 promise 相同的完成方式被完成。它可以是完成( resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。
如果传的迭代是空的,则返回的 promise 将永远等待。
如果迭代包含一个或多个非承诺值和/或已解决/拒绝的承诺,则 Promise.race 将解析为迭代中找到的第一个值。
var p1 = new Promise(function(resolve, reject) {
setTimeout(resolve, 500, "one");
});
var p2 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, "two");
});
Promise.race([p1, p2]).then(function(value) {
console.log(value); // "two"
// 两个都完成,但 p2 更快
});