promise和async/await使用方法区别,回调地狱说明和解决方法,以及Promise异步操作常用方法:Promise.reslove、Promise.reject、Promise.all..

一、promise:用于处理异步操作的对象(实际是一个构造函数)

promise接受一个函数作为参数,分别是resolvereject;

resolve处理成功的回调,通过.then输出成功的结果;

reject处理失败的回调,通过.catch输出失败的结果;

function fetchData() {
  return new Promise((resolve, reject) => {
    // 异步操作
    if (/* 操作成功 */) {
      resolve(result); // 操作成功后调用resolve方法
    } else {
      reject(error); // 操作失败后调用reject方法
    }
  });
}

fetchData()
  .then(result => {
    // 处理操作成功的结果
  })
  .catch(error => {
    // 处理操作失败的结果
  });

二、async/await:异步编程基于Promise的语法糖

async定义一个异步函数,await等待一个promise对象返回解析结果

通过try()处理成功的结果,catch()处理失败的结果

async function fetchData() {
  try {
    const result = await asyncOperation(); // 等待异步操作完成并获得结果
    // 处理操作成功的结果
  } catch (error) {
    // 处理操作失败的结果
  }
}

fetchData();

三、回调地狱的说明和解决方法

1、回调地狱:当有多个异步操作需要按特定的顺序执行,而每一个操作都依赖于前一个操作的结果时,可能会产生回调地狱

回调地狱的例子:

asyncFunction1(function(result1) {
    asyncFunction2(result1, function(result2) {
        asyncFunction3(result2, function(result3) {
            // 更多嵌套...
        });
    });
});

解决回调地狱:

方法1:使用Promise

asyncFunction1()
    .then(result1 => asyncFunction2(result1))
    .then(result2 => asyncFunction3(result2))
    .then(result3 => {
        // 处理最终结果
    })
    .catch(error => {
        // 处理错误
    });

方法2:使用async/await

async function doAsyncOperations() {
    try {
        const result1 = await asyncFunction1();
        const result2 = await asyncFunction2(result1);
        const result3 = await asyncFunction3(result2);
        // 处理最终结果
    } catch (error) {
        // 处理错误
    }
}

doAsyncOperations();

四、Promise常用静态方法(用来处理异步操作结果)

1、Promise.resolve(value):返回一个解析过的 Promise 对象,以给定的值解析。如果该值是一个 Promise,它将被原样返回

let resolvedPromise = Promise.resolve(42);
resolvedPromise.then(value => console.log(value)); // 输出 42

2、Promise.reject(reason):返回一个拒绝的 Promise 对象,以给定的原因(reason)拒绝

let rejectedPromise = Promise.reject("Error!");
rejectedPromise.catch(reason => console.log(reason)); // 输出 "Error!"

3、Promise.all(iterable):返回一个 Promise,该 Promise 在可迭代对象中的所有 Promise 都已被解析或被拒绝后,以解析的形式被解决

let promise1 = Promise.resolve(1);
let promise2 = Promise.resolve(2);
let promise3 = Promise.resolve(3);

Promise.all([promise1, promise2, promise3])
    .then(values => console.log(values)) // 输出 [1, 2, 3]
    .catch(error => console.log(error));

4、Promise.race(iterable): 接收一个可迭代的对象,例如数组,包含一组 Promise 对象。返回一个新的 Promise 对象,该对象在迭代器中的第一个 Promise 解析或拒绝时解析或拒绝

let promise1 = new Promise(resolve => setTimeout(() => resolve(1), 1000));
let promise2 = new Promise(resolve => setTimeout(() => resolve(2), 500));

Promise.race([promise1, promise2])
    .then(winner => console.log(winner)) // 输出 2
    .catch(error => console.log(error));

5、Promise.any(iterable): 接收一个可迭代对象,返回一个新的 Promise 对象。该 Promise 对象在可迭代对象中的任何 Promise 对象成功解析时就会被解析。如果所有 Promise 对象都被拒绝,则返回一个包含所有拒绝原因的数组

let promise1 = new Promise((resolve, reject) => setTimeout(() => reject("Error 1"), 1000));
let promise2 = new Promise(resolve => setTimeout(() => resolve("Success!"), 500));

Promise.any([promise1, promise2])
    .then(result => console.log(result)) // 输出 "Success!"
    .catch(errors => console.log(errors)); // 未被调用

6、Promise.allSettled(iterable):Promise.all 类似,但不关心 Promise 对象是否成功解析。它等待所有的 Promise 对象都被解析(无论是解析还是拒绝),然后返回一个包含所有结果的数组

let promise1 = Promise.resolve(1);
let promise2 = Promise.reject("Error");
let promise3 = Promise.resolve(3);

Promise.allSettled([promise1, promise2, promise3])
    .then(results => console.log(results))
    .catch(error => console.log(error));

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值