首页 > 解决方案 > 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()是异步的

标签: reactjsazure-devops

解决方案


您需要setStateconsole.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.");
        }
    });
});

推荐阅读