reactjs - VSS SDK 行为异步
问题描述
我有这段代码
VSS.require(["TFS/WorkItemTracking/Services"], function(workItemServices:any) {
workItemServices.WorkItemFormService.getService().then(function (workItemFormSvc:any) {
if(workItemFormSvc.hasActiveWorkItem()) {
workItemFormSvc.getFieldValue(["System.Id"]).then(function(value:any){
wId = value;
console.log("work item id",value);
});
}
else {
console.log("Active work item is NOT available.");
}
});
});
VSS.require(["VSS/Service"], function() {
userId = VSS.getWebContext().user.id;
console.log("inside require::::", VSS.getWebContext().user.id);
});
this.setState({workItemId : wId}, ()=>console.log(this.state.workItemId));
this.setState({personId : userId}, ()=> console.log(this.state.personId));
console.log
输出如下
红色矩形中的来自范围this.setState
,绿色框架中的来自require
范围。
我想要这些值,但是在从require
范围设置值之前以某种方式完成了赋值操作。
我怎么能处理这个?
注意:在官方文档中表示require()
是异步的
解决方案
您需要setState
在console.log
. require()
例如:
VSS.require(["TFS/WorkItemTracking/Services"], function(workItemServices:any) {
workItemServices.WorkItemFormService.getService().then(function (workItemFormSvc:any) {
if(workItemFormSvc.hasActiveWorkItem()) {
workItemFormSvc.getFieldValue(["System.Id"]).then(function(value:any){
wId = value;
this.setState({workItemId : wId}, ()=>console.log(this.state.workItemId));
console.log("work item id",value);
});
}
else {
console.log("Active work item is NOT available.");
}
});
});
推荐阅读
- r - 带有嵌套 `ggforce::facet_zoom` 的构面环绕图
- javascript - 为什么在 mouseout 事件处理程序中将输入 type="number" 设置为 type="text" 不起作用?
- javascript - 如何使用 Firebase 从云功能端查找用户是否已登录?
- java - 在 FXML 中传递数组参数
- ios - 无法使用 Transporter App 将 ipa 上传到 AppStoreConnect
- c# - Azure Data Box 使用 C# 上传文件
- bash - 在 Bash 脚本上只刷新几行
- javascript - 如何延迟表单提交
- gitlab - GitLab 中的文件挂钩和权限问题
- ruby-on-rails - ActiveRecord #includes,有条件,但加载所有关系,而不仅仅是那些匹配条件