js--promise

promise

Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
一个 Promise 必然处于以下几种状态之一:

待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
已兑现(fulfilled): 意味着操作成功完成。
已拒绝(rejected): 意味着操作失败。
因为 Promise.prototype.then 和 Promise.prototype.catch 方法返回的是 promise, 所以它们可以被链式调用。
当 .then() 中缺少能够返回 promise 对象的函数时,链式调用就直接继续进行下一环操作。因此,链式调用可以在最后一个 .catch() 之前把所有的 handleRejection 都省略掉。类似地, .catch() 其实只是没有给 handleFulfilled 预留参数位置的 .then() 而已。
在这里插入图片描述

promise 的方法

Promise.all(iterable)
1.Promise.all方法常被用于处理多个promise对象的状态集合。 返回值是一个新的promise对象。
2. 如果参数中的promise对象都成功就正常返回,并且promiseAll方法中的每一个promise都是并行状态,当全部完成之后就会自动的调用promise.all().then()方法.
3. 如果参数中的promise对象有任意一个没有正常返回,那么整个pAll都会认为是失败的,并且把失败的这个promise对象的返回值直接输出 其他的就不会在继续执行了。
Promise.allSettled(iterable)
等到所有promises都已敲定(settled)(每个promise都已兑现(fulfilled)或已拒绝(rejected))。
返回一个promise,该promise在所有promise完成后完成。并带有一个对象数组,每个对象对应每个promise的结果。
Promise.any(iterable)
接收一个Promise对象的集合,当其中的一个 promise 成功,就返回那个成功的promise的值。
Promise.race(iterable)
Promise.race方法返回的也是一个promise对象, race方法谁先有结果就返回谁,无论成功还是失败(成功的就走resolve,失败就会在reject中返回)
Promise.reject(reason)
返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法
Promise.resolve(value)
返回一个状态由给定value决定的Promise对象。如果该值是thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定;否则的话(该value为空,基本类型或者不带then方法的对象),返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法。通常而言,如果您不知道一个值是否是Promise对象,使用Promise.resolve(value) 来返回一个Promise对象,这样就能将该value以Promise对象形式使用。
Promise.prototype.finally()
finally() 方法返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式。这避免了同样的语句需要在then()和catch()中各写一次的情况。
Promise.prototype.catch()
catch() 方法返回一个Promise ,可以用于您的promise组合中的错误处理。

创建promise

Promise 对象是由关键字 new 及其构造函数来创建的。 Promise 有一个参数是一个回调函数,这个回调函数有两个参数: resolve 和 reject ——作为其参数。当异步任务顺利完成且返回结果值时,会调用 resolve 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用reject 函数。这两个回调函数只要没有调用就一直是pending

    let p1 = new Promise((resolve, reject)=>{
    
    

            resolve("1")//成功后的回调
            reject("2")//失败后的回调
            console.log(2)
        })

想要某个函数拥有promise功能,只需让其返回一个promise即可。

function myAsyncFunction(url) {
    
    
  return new Promise((resolve, reject) => {
    
    
    const xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.onload = () => resolve(xhr.responseText);
    xhr.onerror = () => reject(xhr.statusText);
    xhr.send();
  });
};

promise错误捕获 catch
在创建/使用promise的时候,如果代码报错,那么会自动的走then.reject回调函数,如果在then中没有写reject回调,会在catch中进行错误捕获,catch也可以捕获then方法中的报错

 let p1 = new Promise((resolve, reject) => {
    
    
            if (1 > 0) {
    
    
                throw new Error("手动报错")
                resolve(1)
            } else {
    
    
                reject(2)
            }
        })

        p1.then((resolve) => {
    
    
            console.log("resolve 成功后的结果", resolve);
        }, (reject) => {
    
    
            throw new Error("手动报错")
            console.log("reject 失败后的结果", reject);
        }).catch((err)=>{
    
    
            console.log("catch err===>", err);
        }).finally(()=>{
    
    
            console.log("finally fin===>");
        })
        // console.log(p1);
    }

Je suppose que tu aimes

Origine blog.csdn.net/jfx_jfx/article/details/120587122
conseillé
Classement