JavaScript异步函数报错“Cannot read property 'then' of undefined”求助
解决“Cannot read property 'then' of undefined”的异步问题
嘿,我来帮你搞定这个头疼的错误~ 你说自己的函数不是没返回内容,但其实问题恰恰出在这里——你的getWorkItems函数没有返回异步操作的Promise对象,所以默认返回了undefined,这才导致你调用.then()的时候报错。
错误原因拆解
当你在某个值后面调用.then()时,这个值必须是一个Promise(异步操作的容器)。而你的函数里虽然调用了TFS的WorkItem查询API,但没有把这个API返回的Promise给return出去,函数执行完就默认返回undefined,自然就找不到.then()方法啦。
修正后的代码示例
你只需要在调用queryClient的异步方法时加上return就行,同时还要注意避免WIQL语法错误的小细节:
function getWorkItems(iterationPath, projectId) { var queryClient = VSS_Service.getCollectionClient(TFS_Wit_QueryAPI.WorkItemTrackingHttpClient); // 转义路径里的单引号,避免路径含特殊字符时导致查询语法错误 var escapedIterationPath = iterationPath.replace(/'/g, "''"); var query = { query: "SELECT [System.Id] FROM WorkItem WHERE [System.IterationPath] = '" + escapedIterationPath + "'" }; // 关键:返回异步API调用的Promise return queryClient.queryByWiql(query, projectId); }
额外提醒
你原来的字符串拼接方式有风险,如果iterationPath里包含单引号(比如路径里有O'Neil这类名称),会直接导致WIQL查询语法错误。上面的代码里加了escapedIterationPath来转义单引号,把单个单引号换成两个,能完美避免这个问题。
这样修改后,getWorkItems()就会返回一个Promise,你就能正常用.then()来处理查询结果啦~
内容的提问来源于stack exchange,提问作者Journeyman1234
相关产品推荐
相关产品推荐

