在Bluebird promise

时间:2016-02-23 22:29:44

标签: javascript promise bluebird

我认为这是一个简单的问题 - 但我无法解决它。 我有一个我正在使用的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"。如果我使用字符串而不是函数,它会按预期工作。

1 个答案:

答案 0 :(得分:2)

在您从异步回调中覆盖a classic之前,您已将a传递给finally

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

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

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