Promise的第一次理解

82 阅读2分钟

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 更快
});