Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript异步返回';然后未定义';_Javascript_Ajax - Fatal编程技术网

JavaScript异步返回';然后未定义';

JavaScript异步返回';然后未定义';,javascript,ajax,Javascript,Ajax,我是异步编程新手,读过类似的线程,它们似乎都有不返回任何内容的问题,而我的线程却有 但是,我仍然收到错误消息“无法读取属性”,然后是“未定义” function getWorkItems(iterationPath, projectId) { var queryClient = VSS_Service.getCollectionClient(TFS_Wit_QueryAPI.WorkItemTrackingHttpClient); var query = { query: "S

我是异步编程新手,读过类似的线程,它们似乎都有不返回任何内容的问题,而我的线程却有

但是,我仍然收到错误消息“无法读取属性”,然后是“未定义”

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();

        });
}
上面显示的调试消息很好,它从服务器获取数据,然后在别处调用时出错

let bar;

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

无法读取未定义的

getWorkItems的属性“then”中没有return语句,因此它隐式返回未定义的。另外,由于
queryClient.queryByWiql(query,projectd)
已经返回承诺,因此您不需要创建自己的承诺,可以执行以下操作:

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);
}
如果您想保留日志语句并在其中成功执行NotifyLoad,您可以,但您仍然不需要创建自己的承诺。如果您处于.then回调中,则只需返回希望承诺解析为的值:

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;
    });
}

getWorkItems中没有return语句,因此它隐式返回undefined。另外,由于
queryClient.queryByWiql(query,projectd)
已经返回承诺,因此您不需要创建自己的承诺,可以执行以下操作:

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);
}
如果您想保留日志语句并在其中成功执行NotifyLoad,您可以,但您仍然不需要创建自己的承诺。如果您处于.then回调中,则只需返回希望承诺解析为的值:

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;
    });
}

getWorkItems返回的是未定义的,不是承诺。我以为我使用的“已解决”是为了处理这个问题。。。?它应该是什么样子,请?您正在返回匿名函数内部的一个新承诺,而不是外部函数getWorkItems。可能QueryByIQL不返回承诺。尝试
console.log
it.getWorkItems返回的是未定义的,不是承诺。我以为我使用“已解决”是为了解决这个问题。。。?它应该是什么样子,请?您正在返回匿名函数内部的一个新承诺,而不是外部函数getWorkItems。可能QueryByIQL不返回承诺。尝试
console.log
it。非常感谢。令人沮丧但不知道我在做什么:(非常感谢。令人沮丧但不知道我在做什么:(