我如何知道哪些处理程序在 Promise 中抛出错误?

2024-03-22

假设我有如下承诺:

p.then(Task1)
 .then(Task2)
 .then(Task3)
 .catch(errorHandler);

When Task2遇到错误,我怎么知道错误来自Task2 in catch?


每个人!我自己研究了演示代码。

希望大家能看一下我的回答,好不好。


介绍:

它展示了如何在每个处理程序中跟踪 Promise,使用自定义的错误处理程序来捕获错误。为了了解工作流程promise.

您可以复制以下演示代码并粘贴到您的node.js。根据示例和日志信息,有利于开发人员学习promise.


使用过的promise模块如下:

  • bluebird

演示代码如下:

var Promise = require('bluebird');

// You can input any argument in this function to test workflow of promise 
function testPromise(input) {
    let promise = Promise.resolve(input);
    promise
      .then(makeTask('Task1'))
      .then(makeTask('Task2'))
      .then(makeTask('Task3'))
      .catch(makeErrorPredicate('Task1'), taskLog('Task1'))
      .catch(makeErrorPredicate('Task2'), taskLog('Task2'))
      .catch(makeErrorPredicate('Task3'), taskLog('Task3'))
}

// define task handler functions
function makeTask(task) {
    return function task1Handler(input) {
        if (input === task) {
            throw new Error(task)
        }            
        return input
    }
}

// custom error that it checks error message 
function makeErrorPredicate(msg) {
    return function taskError(err) {
        var result = err.message === msg;
        console.log(msg + ': ' + result)
        return result;
    }
}

// hint the error when the error has matched
function taskLog(msg) {
    return function thelog(err) {
        console.log('It\'s ' + msg)
    }  
}

这个例子:

>testPromise('Task1')
Task1: true
It's Task1

>testPromise('Task2')
Task1: false
Task2: true
It's Task2

>testPromise('Task3')
Task1: false
Task2: false
Task3: true
It's Task3

从上面的例子我们可以知道:

When input是'Task1',路线是:

第一个Handler -> 第一个Catcher

When input是'Task2',路线是:

FirstHandler -> SecondHandler -> FirstCatcher -> SecondCather

When input是'Task3',路线是:

第一个处理程序 -> 第二个处理程序 -> 第三个处理程序 -> 第一个捕获器 -> 第二个捕获器 -> 第三个捕获器

所以,从上面的结果我们知道,我们可以理解promise是如何工作的。


如果大家对这个答案满意或不满意,请告诉我,谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何知道哪些处理程序在 Promise 中抛出错误? 的相关文章