Promise 的用途
首先要了解Promise是什么,有什么用,为啥要用它?
是什么?
当谈到Promise的时候,你肯定顺便听到回调、异步、这样的玩意。其实说得通俗一点,Promise就是一种写代码的方式,并且是用来写JavaScript编程中的异步代码的。
基本用法
一句话:
代码语言:javascript复制return new Promise((resolve,reject)=>{})
那么Promise有什么用,为啥要用呢?
先从简单的回调说起
代码语言:javascript复制get((data) => {
})
就像这样子,就是处理异步任务的回调函数。
如果多起来了,那就是:
代码语言:javascript复制get1(data1 => {
get2(data1, data2 => {
get3(data2, data3 => {
get4(data3, data4 => {
get5(data4, data5 => {
})
})
})
})
})
我们不得不提到回调地狱了:)
就如上面的代码,如果想要更改执行顺序,很麻烦,读代码的时候跳来跳去,让人头大。(这种还算少了)
如果用Promise来写的话:
代码语言:javascript复制// 先把get都转成返回Promise对象的函数
// 然后
get1()
.then(get2)
.then(get3)
.then(get4)
.then(get5)
.then(data => {
})
舒服了
由此也可以引出 .then 的用法
then()
方法返回一个Promise
。它最多需要有两个参数:Promise 的成功和失败情况的回调函数。
语法:
代码语言:javascript复制p.then(onFulfilled[, onRejected]);
p.then(value => {
// fulfillment
}, reason => {
// rejection
});
如何使用 Promise.all
Promise.all(iterable)
方法返回一个Promise
实例,此实例在 iterable
参数内所有的promise
都“完成(resolved)”或参数中不包含promise
时回调完成(resolve);如果参数中 promise
有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败promise
的结果。
语法:
代码语言:javascript复制const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then(function(values) {
console.log(values);
});
如何使用 Promise.race
Promise.race(iterable)
方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
语法:
代码语言:javascript复制const promise1 = new Promise(function(resolve, reject) {
setTimeout(resolve, 500, 'one');
});
const promise2 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then(function(value) {
console.log(value);