动态定义蓝鸟承诺中的函数

Dynamically define function in Bluebird promise

本文关键字:函数 承诺 定义 蓝鸟 动态      更新时间:2023-09-26

我有一个我认为是一个简单的问题 - 但我根本无法解决它。我有一个我正在使用的 API,它返回一个function供我在完成所有代码时调用。我曾以为我可以将函数放在finally调用中 - 但似乎我无法在承诺链中重新定义函数。

一个简单的例子:

let a= function() {console.log("at the start");};
BbPromise.resolve("Executing")
    .tap(console.log)
    .then(function() {a = function() {console.log("at the end");}})
    .finally(a); 

最后,我将如何让"At the end"打印出来?此示例将始终打印"At the start" 。如果我使用字符串而不是函数,它会按预期工作。

在从

异步回调覆盖finally调用之前,您将a传递给该调用 - 这是一个经典。

您只需要在finally回调中取消引用a

.finally(function() { a(); })

当然,请注意,重新定义函数很奇怪,可能有更好的方法来解决您的实际问题。如果你希望得到一个函数的承诺,你不应该为函数创建一个全局变量,而应该.then(fn => fn())