当前位置: 首页 > 工具软件 > node-promise > 使用案例 >

node.js学习笔记 04Promise详解

钦枫
2023-12-01

    Promise就是一个用来存储数据对象

    但是由于Promise存取的方式的特殊,所以可以直接将异步调用的结果存储到Promise中

    对Promise进行链式调用时

      后边的方法(then和catch)读取的上一步的执行结果

      如果上一步的执行结果不是当前想要的结果,会直接跳过当前方法

    当Promise出现异常时,而整个调用链中没有出现catch,则异常会被抛出

    后边的代码处理前边的错误,catch出错如果后面没有catch代码时错误会直接抛出,一般把catch写到最后

    promise中的

        then

        catch

        finally

        - 这三个方法都会返回一个新的Promise 相当于后面加了 return new Promise()

            Promise中会存储回调函数的返回值

        finally

            - finally的返回值,不会存储到新的Promise中

function sum(a, b) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(a + b);
    }, 1000);
  });
}
sum(123, 456)
  .then(result => result + 7)
  .catch(result => console.log('异常处理' + result))
  .then(result => result + 8)
  .then(result => console.log(result));

    静态方法

        - Promise.resolve() 创建一个立即完成的Promise

        - Promise.reject() 创建一个立即拒绝的Promise

        - Promise.all([...]) 同时返回多个Promise执行结果

            其中有一个报错,就会返回错误

        - Promise.allSettled([...]) 同时返回多个Promise执行结果无论是否成功

            {status: 'fulfilled', value: 579}

            {status: 'rejected', reason: '出错了'}

        - Promise.race([...]) 返回一个执行最快的Promise结果,无论对错

        - Promise.any([...]) 返回一个执行最快的完成的Promise结果,只有都报错才报错

// Promise.resolve(10);

// Promise.reject('出错了');

// Promise.all([sum(123, 456), sum(5, 6), sum(33, 44)]).then(r => {
//   console.log(r);
// });

// Promise.allSettled([sum(123, 456), sum(5, 6), Promise.reject('出错了'),sum(33, 44)]).then(r => {
//   console.log(r);
// });

// Promise.race([sum(123, 456), sum(5, 6), Promise.reject('出错了'), sum(33, 44)]).then(r => {
//   console.log(r);
// }).catch(r => console.log('出错了'))

Promise.any([sum(123, 456), sum(5, 6), Promise.reject('出错了'), sum(33, 44)])
  .then(r => {
    console.log(r);
  })
  .catch(r => console.log('出错了'));

 类似资料: