对于Promise的简单理解 ?

2023-01-16 16:07:52 浏览数 (1)

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);

0 人点赞