await错误捕获实现方式源码解析

2022-12-27 16:05:07
目录
前言Promise 的使用方法await-to-js源码总结

前言

Promise>

资源:

    仓库地址:await-to-js参考文章:How to write async await without try-catch blocks in Javascript (grossman.io)

    Promise>
      创建一个 Promise 实例。这通常是通过调用 Promise 构造函数来完成的,并将一个函数作为参数传递给构造函数,该函数接收两个参数:resolve 和 reject。resolve 和 reject 分别用于处理 Promise 的成功和失败结果。在函数体内执行异步操作。当异步操作完成时,如果执行成功,则调用 resolve 函数来将 Promise 的状态变为“已完成”,并将结果作为参数传递给 resolve 函数;如果执行失败,则调用 reject 函数将 Promise 的状态变为“已拒绝”,并将失败的原因作为参数传递给 reject 函数。使用 then 方法来处理 Promise 的成功和失败结果。then 方法接收两个参数:一个处理成功结果的函数和一个处理失败结果的函数。在 Promise 状态变为“已完成”或“已拒绝”后,then 方法会自动执行相应的处理函数。

      示例代码如下:

      const myPromise = new Promise(function(resolve, reject) {
        // 执行异步操作
        setTimeout(function() {
          // 异步操作成功
          resolve('Success');
        }, 1000);
      });
      // 处理 Promise 的成功和失败结果
      myPromise.then(function(result) {
        // 处理成功结果
        console.log(result);
      }).catch(function(err){
        // 处理失败
        console.log(err)
      })
      

      异步函数正在等待 Promise,因此当 promise 遇到错误时,它会抛出一个异常,该异常将在 promise 的 catch 方法中捕获。

      其他处理错误的方式:

      try{
          const res = await myPromise()
      }catch(e){
          console.log(e)
      }
      

      当代码中有大量的异步操作时,就需要有很多的try/catch 块,代码看起来就很臃肿,那么有什么更好的处理这些错误的办法呢?

      await-to-js

      await-to-js

      这个项目的>

      Async await wrapper for easy error handling

      异步等待包装,方便错误处理

      用法:

      import to from 'await-to-js';
      [ err, user ] = await to(UserModel.findById(1));
      if(!user) return cb('No user found');
      

      to 函数接收一个 Promise,然后将成功响应解析为数组,并将返回数据作为第二项。从捕获中收到的错误作为第二项。

      源码

      /**
       * @param { Promise } promise
       * @param { Object= } errorExt - Additional Information you can pass to the err object
       * @return { Promise }
       */
      export function to<T, U = Error> (
        promise: Promise<T>,
        errorExt?: object
      ): Promise<[U, undefined] | [null, T]> {
        return promise
          .then<[null, T]>((data: T) => [null, data])
          .catch<[U, undefined]>((err: U) => {
            if (errorExt) {
              const parsedError = Object.assign({}, err, errorExt);
              return [parsedError, undefined];
            }
            return [err, undefined];
          });
      }
      export default to;
      

      接收一个 Promise 实例和一个可选的 errorExt 对象作为参数。该函数返回一个新的 Promise。

      原理是使用 then 方法处理 Promise 的成功结果,并使用 catch 方法处理 Promise 的失败结果。如果 Promise 执行成功,则会将结果包装成一个包含两个元素的数组并作为新的 Promise 的成功结果返回;如果 Promise 执行失败,则会将错误对象包装成一个包含两个元素的数组并作为新的 Promise 的失败结果返回。

      总结

      使用await-to-js,得以一行代码完成对异步代码错误的捕获,阅读文章得知,await-to-js>

      以上就是await 错误捕获实现方式源码解析的详细内容,更多关于await 错误捕获的资料请关注易采站长站其它相关文章!