我认为这是一个简单的问题 - 但我无法解决它。
我有一个我正在使用的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"
。如果我使用字符串而不是函数,它会按预期工作。
答案 0 :(得分:2)
在您从异步回调中覆盖a classic之前,您已将a
传递给finally
。
您只需在a
回调中取消引用finally
:
.finally(function() { a(); })
当然,请注意重新定义函数是很奇怪的,并且可能有更好的方法来解决您的实际问题。如果您希望获得函数的承诺,则不应为函数创建全局变量,而应该.then(fn => fn())
。