Javascript TimerTask完成不需要';t couse Task.any生成已完成的任务

Javascript TimerTask完成不需要';t couse Task.any生成已完成的任务,javascript,azure-durable-functions,Javascript,Azure Durable Functions,最近我开始学习Azure无服务器计算 在研究持久功能时,我遇到了TimeTasks的问题 下面是一些例子来解释一个问题: (一) module.exports=df.orchestrator(函数*(上下文){ 常量输出=[]; const deadline=moment.utc(context.df.currentUtcDateTime).add(20,“s”); const activityTask=context.df.waitForExternalEvent(“批准”); const t

最近我开始学习Azure无服务器计算

在研究持久功能时,我遇到了TimeTasks的问题

下面是一些例子来解释一个问题:

(一)

module.exports=df.orchestrator(函数*(上下文){
常量输出=[];
const deadline=moment.utc(context.df.currentUtcDateTime).add(20,“s”);
const activityTask=context.df.waitForExternalEvent(“批准”);
const timeoutTask=context.df.createTimer(deadline.toDate());
const winner=yield context.df.Task.any([activityTask,timeoutTask]);
如果(获胜者===活动任务){
push(yield context.df.callActivity(“Approval”、“Approved”));
}
其他的
{
push(yield context.df.callActivity(“升级”、“部门负责人”);
}
如果(!timeoutTask.isCompleted){
//在函数退出之前,必须完成或取消所有挂起计时器。
timeoutTask.cancel();
}
返回输出;
});
(二)

const df=require(“持久功能”);
module.exports=df.orchestrator(函数*(上下文){
const event1=context.df.waitForExternalEvent(“event1”);
const event2=context.df.waitForExternalEvent(“event2”);
const event3=context.df.waitForExternalEvent(“event3”);
const winner=yield context.df.Task.any([event1,event2,event3]);
如果(获胜者==事件1){
// ...
}否则如果(获胜者==事件2){
// ...
}否则如果(获胜者==事件3){
// ...
}
});
至于第二个例子,情况非常清楚:

  • 我们对端点进行HTTP调用,该端点将触发orchestrator
  • orchestrator的生成器函数收集3个不同的
    任务
    对象,每个对象都在等待外部POST API调用(使用Event1Event2Event3负载)
  • 我们正在
    生成
    任务集的输出,这是给定任务数组中任何已完成任务的第一个-一旦我们提交了这3个事件中的任何一个,我们就获得了获胜者,代码继续
  • 至少我是这样理解的。我们从3个挂起的任务和
    taskSet
    也挂起的任务开始: . 一旦发生任何此类事件,某些任务将其状态更改为“已完成”,任务集将其状态更改为“已完成”,并返回结果

    现在,让我们用基于tim的任务替换这些任务中的一个,如下所示:

    const df=require(“持久功能”);
    恒力矩=要求(“力矩”);
    module.exports=df.orchestrator(函数*(上下文){
    const event1=context.df.waitForExternalEvent(“event1”);
    const event2=context.df.waitForExternalEvent(“event2”);
    //const event3=context.df.waitForExternalEvent(“event3”);
    const deadline=moment.utc(context.df.currentUtcDateTime).add(10,“s”);
    const event3=context.df.createTimer(deadline.toDate());
    const taskSet=context.df.Task.any([event1,event2,event3]);
    const winner=产量任务集;
    如果(获胜者==事件1){
    // ...
    }否则如果(获胜者==事件2){
    // ...
    }否则如果(获胜者==事件3){
    // ...
    timeoutTask.cancel();
    }
    });
    
    现在的想法也很简单:要么我们没有通过Event1Event2,超时被提升(Event3),要么我们通过了。但问题是,即使事件3在10秒后完成,我们也无法分配结果-它是未定义的:。虽然我们可以让步(10秒后调试器开始遍历整个finction部分,因此触发了
    yield
    ,但尝试逐步遍历其赋值过程调试器以等待另一个任务完成)。似乎timeTask已完成,但任务未完成。任何
    都未注意到这一点

    有没有人有什么建议来解释为什么这不起作用?(1)中的示例应该按照文档中的建议工作,但事实并非如此(由于相同的问题-从未触发超时)