承诺里面的cron作业没有执行

时间:2017-02-15 20:28:33

标签: javascript typescript cron promise

我在打字稿中有一段代码有一个非常奇怪的行为 我写了一些代码,显然可以,但我有一个非常奇怪的行为。 在我登录到服务后,我想开始一个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);

2 个答案:

答案 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);