我在打字稿中有一段代码有一个非常奇怪的行为 我写了一些代码,显然可以,但我有一个非常奇怪的行为。 在我登录到服务后,我想开始一个CronJob。
SomeService.login()
.then(() => {
// new CronJob(expression, workFunction, null, true);
workFunction();
});
function workFunction() {
console.log("start")
Promise.resolve()
.then(() => startSomething())
.then(moreStuff1)
.then(moreStuff2)
.then(moreStuff3)
...
.then(console.log)
.catch(errorHandling);
}
如果我现在只调用workFunction,这段代码对我来说很好,但如果我切换代码使用CronJob,它会调用函数但内部的promises将无法解析。 第一个.then被调用,下一个被忽略,函数startSomething()的返回将打印在最后.then()
我不知道这是否与CronJob是从Promise.then()内部启动的事实有关,但我看到每个tick都调用了workFunction,这是正确的。
固定
我可以通过将workFunction绑定到此来修复它。
new CronJob(expression, workFunction.bind(self), null, true);
答案 0 :(得分:0)
return
workFunction
。
SomeService.login()
.then(() => {
// new CronJob(expression, workFunction, null, true);
workFunction();
});
function workFunction() {
console.log("start")
return Promise.resolve()
.then(() => startSomething())
.then(moreStuff1)
.then(moreStuff2)
.then(moreStuff3)
...
.then(console.log)
.catch(errorHandling);
}
答案 1 :(得分:0)
似乎这种行为与cron作业的执行上下文有某种关系。我不明白,但似乎在某些方面有所不同。我想用超时来突破这个环境可以解决问题:
function wrapper() { setTimeout(workFunction) }
new CronJob(expression, wrapper, null, true);