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。非常感谢。令人沮丧但不知道我在做什么:(非常感谢。令人沮丧但不知道我在做什么:(