首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript async返回'then not defined‘

JavaScript async返回'then not defined‘
EN

Stack Overflow用户
提问于 2018-04-12 23:44:40
回答 1查看 48关注 0票数 0

我是异步编程的新手,我读过类似的线程,它们似乎都有相同的问题,不返回任何东西,而我的……?

但是,我仍然收到错误消息“Cannot read property”then“of undefined”

代码语言:javascript
复制
function getWorkItems(iterationPath, projectId) {

    var queryClient = VSS_Service.getCollectionClient(TFS_Wit_QueryAPI.WorkItemTrackingHttpClient);
    var query = { query: "SELECT [System.Id] FROM WorkItem WHERE [System.IterationPath] = '" + iterationPath + "'" };
    var resultOfQuery;

    queryClient.queryByWiql(query, projectId).then(

        function (resultOfQuery) {
            return new Promise((resolve, reject) => {
                resolve(resultOfQuery);
                console.log("Debug: " + JSON.stringify(resultOfQuery));
            })
            VSS.notifyLoadSucceeded();

        });
}

上面输出的调试消息很好,它从服务器获取数据,当我在其他地方调用它时,它会出错

代码语言:javascript
复制
let bar;

getWorkItems(counter.path, projectId).then ( res => {
    bar = res;
    console.log("Debug: should be output of query " + JSON.stringify(bar));
})

无法读取未定义的属性'then‘

EN

回答 1

Stack Overflow用户

发布于 2018-04-12 23:50:16

getWorkItems中没有return语句,所以它隐式返回未定义的。此外,由于queryClient.queryByWiql(query, projectId)已经返回了promise,因此您不需要创建自己的promise,可以执行以下操作:

代码语言:javascript
复制
function getWorkItems(iterationPath, projectId)
{
  var queryClient = VSS_Service.getCollectionClient(TFS_Wit_QueryAPI.WorkItemTrackingHttpClient);
  var query = { query: "SELECT [System.Id] FROM WorkItem WHERE [System.IterationPath] = '" + iterationPath + "'" };
  return queryClient.queryByWiql(query, projectId);
}

如果您想保留日志语句和notifyLoadSucceeded,您可以这样做,但您仍然不需要创建自己promise。如果你在.then回调中,你只需要返回你希望promise解析的值:

代码语言:javascript
复制
function getWorkItems(iterationPath, projectId)
{
  var queryClient = VSS_Service.getCollectionClient(TFS_Wit_QueryAPI.WorkItemTrackingHttpClient);
  var query = { query: "SELECT [System.Id] FROM WorkItem WHERE [System.IterationPath] = '" + iterationPath + "'" };
  return queryClient.queryByWiql(query, projectId)
    .then(function(resultOfQuery) {
      console.log("Debug: " + JSON.stringify(resultOfQuery));
      VSS.notifyLoadSucceeded();
      return resultOfQuery;
    });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49800792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档