当前位置: 首页 > 知识库问答 >
问题:

理解promise链

唐麒
2023-03-14

我在NodeJS项目中使用Promises,希望更好地理解Promise.chains。

我有一个公开的功能:

主库函数,我希望我的用户调用。它将返回一个promise,然后用户需要处理解决和拒绝的问题。

这个主库函数将调用许多其他库函数,我想链接这些函数。因此,这些函数中的每一个都将返回如下promise:

mainLibraryFunction = function (arguments...) {
  return this.firstLibraryFn().then(secondLibraryFn).then(thirdLibraryFn)...
}

每一个都将返回一个promise,可以是拒绝,也可以是解决。我想要的是,如果任何库函数拒绝,那么将拒绝传递给下一个函数,我希望从MainLibraryFunction返回拒绝。因为否则我需要为每个Library函数实现错误案例的处理。因为它们中的每一个都将获得promise作为参数,所以我需要检查每个函数,这是我得到了解析还是拒绝了promise作为参数。然后,我需要将被拒绝的参数传递给所有函数,直到最后一个函数返回MainLibraryFunction。这是不明智的。

那么,处理这个问题的最佳做法是什么?我应该在链条的末端加上渔获物吗?我听说如果我在最后加上一个陷阱,即使他们中的任何一个会拒绝,它也会打破链条。然后,从捕获,我可以返回Promise.reject()从主库函数。

共有1个答案

公羊学义
2023-03-14

.then方法接受两个参数onCompletedonRejected。如果不提供onRejected回调,则不会调用此特定的。然后该链将转到实现onRejected的下一个处理程序。

Promise.reject()
    .then(() => console.log('onFulfilled 1'))
    .catch(() => console.log('catch 1'));  // will get called

Promise.reject()
    .then(
        () => console.log('onFulfilled 2'),
        () => console.log('onRejected 2')  // will get called
    )
    .catch(() => console.log('catch 2'));  // will not get called

 类似资料:
  • 本文向大家介绍请说说你对promise的理解相关面试题,主要包含被问及请说说你对promise的理解时的应答技巧和注意事项,需要的朋友参考一下 Promise是ES6中对回调的处理方案,用于处理回调过多,形成回调地狱,不直观的问题;Promise可以链式调用,代码直观易操作,并且有, 等语法糖便于操作

  • 我试图访问的结果(这里是'机构')的抓取,但继续得到这个: promise{ 它说已解决,但不只是给我我想要的数组。 这是我的密码 以上结果来自console.log(Categories)

  • 我正在构建一个SPFx angular 2组件,它有一个嵌套的子组件。子组件需要引用当前上下文,但如果我引用了: 我得到: SPComponentLoader.LoadComponent:错误:***无法从组件“FFAA6A0E-9EBA-40A0-BEC5-226D1DB53CAF”(RequirementsFormWebPart)加载入口点。defaultLoghandler.error@de

  • 我想编写一个函数,返回一个布尔值,指示具有指定public_id的图像是否已经存在于我的Cloudinary空间中。 我可以使用以下代码将结果记录到控制台: 但是,我想将结果布尔值传递给另一个函数。使用返回语句会导致记录: 这与javascript Promises有关。不过,我似乎无法重组我的代码以使其正常工作。任何帮助都将不胜感激。

  • 我一直得到“UnhandledPromiseRejectionWarning:UnhandledPromiseRejection.此错误源于在没有catch块的异步函数内部抛出,或拒绝未用.catch()处理的Promission.(拒绝ID:2)” 我已经处理了所有的承诺,但错误仍然存在

  • 我在mobx商店中有一个获取请求,看起来像这样: this.lego部件位于如下构造函数中: 我试图访问数组的值,应该在legoParts中。然而,当我控制日志legoParts时,我得到了一堆数据,包括PromiseState(已解决)和PromiseValue。如何简单地访问promise值?我也很困惑,因为尽管PromiseState说已解决,但对象的开头说 谢谢你的帮助!