我一直在使用Microsoft Graph planner API将以前创建的计划程序(有点像模板)推送到新创建的计划程序(该功能正在运行但我无法等待它转过来谁知道当),
所以我创建了简单的Web应用程序(Nodejs),它只是将模板推送到新的计划程序。
目前的流量是 planner created - >桶创建 - >任务创建 - >获取任务详细信息(以确保任务存在) - >更新任务详细信息(复选框)。
然而请求"获取任务细节"创建它后立即导致404错误
{ 错误:{ 代码:"", 消息:"找不到请求的项目。", innerError:{ " request-id":" ...", 日期:" ..." } } }
我最初跳过了"获取任务细节"但这常常导致412"如果找不到匹配错误"
Web应用程序正在运行(实际上几个月没有推动任何更改)。
目前,尝试"获取任务详细信息"几分钟之后完美无缺。
我只能假设现在需要更长的时间来创建导致此错误的任务,但我不能让用户闲置几分钟才能完成此操作。
任何想法都将不胜感激。
谢谢。答案 0 :(得分:1)
操作执行是异步的,有时操作可能需要一些时间才能完成。您需要读取任务详细信息才能更新它,因为PATCH操作要求客户端的最后一个已知etag与If-Match标头一起传入。管道中有一些不同的改进,以改善服务方面的这种情况,这应该会自动提高可靠性。
您已经提到过您的方案是从模板计划创建新计划,这应该需要创建许多任务。根据您的描述,我假设您创建了一个任务,然后在继续下一个任务之前更新该任务的详细信息。如果更改顺序以便在更新任何详细信息之前创建所有任务,则在获得详细信息更新之前,服务将有更多时间完成异步操作。您仍然需要重试读取才能确定。
我知道这不是一个真正的解决方案,但这种方法应该会让用户体验更好一些,直到服务行为得到改善。
答案 1 :(得分:0)
问题是,当您发送创建新任务的初始请求时,尚未创建“任务详细信息”实例,这是一个异步过程。
通过流程,我将delay
步骤添加了5秒钟。
使用Graph API,我添加了一个循环以继续尝试,直到获得光荣的200 OK
getDetails(taskID:string) : Observable<MicrosoftGraph.PlannerTaskDetails> {
let u = 'planner/tasks/' + taskID + '/details';
let s = new Subject<MicrosoftGraph.PlannerTaskDetails>();
let stamp = function stamp(){
let d = new Date();
return '[ss:ms][' + d.getSeconds() + '-' + d.getMilliseconds() + ']';
}
let askDetails = () => {
let detailsAjaxObs = this.getData<MicrosoftGraph.PlannerTaskDetails>(u, null, true);
detailsAjaxObs.delay(650).subscribe(
details => {
console.log('getDetails => getData <PlannerTaskDetails> , s.next(details) ' + stamp());
s.next(details);
},
err => {
console.info('getDetails => getData <PlannerTaskDetails> err, trying again | ' + stamp());
console.info(err);
askDetails();
//s.error(err);
//error "kill" the objs just like complete
}
);
};
askDetails();
return s.asObservable();
} // end getDetails
我想今天我将delay
更改为5000,在这个应用程序中,我希望尽快获得结果,并且不关心不需要的请求。此外,stamp
仅用于记录日志,您可以删除它和日志。