DSM*_*AWD 5 javascript promise typescript angular-promise angular8
调用返回承诺的函数时,除非删除异步运算符,否则返回未定义,然后返回 ZoneAwarePromise,但不包含任何数据。
我知道查询在函数执行时返回数据,但是它似乎没有将该数据传递给函数调用的实际返回部分。
我查看了几个没有回答这个问题的堆栈问题,包括这个问题: Async/Await with Request-Promise Returns Undefined
这是使用 REST 端点来提取数据,console.logs 确实显示数据是正确的,但是返回未定义
this.allPeople.forEach(async person => {
const dodString = await this.getRelatedRecords(person); //undefined
}
Run Code Online (Sandbox Code Playgroud)
这是返回承诺/数据的主要功能
async getRelatedRecords(person) {
// function truncated for clarity
// ...
//
console.warn('This async should fire first');
selPeopleTable.relationships.forEach(relationship => {
allRelationshipQueries.push(
arcgisService.getRelatedTableData(
selPeopleTable.url, [person[oidField.name]], relationship.id, relationship.name),
);
});
await Promise.all(allRelationshipQueries).then(allResults => {
console.log('Inside the Promise');
// The Specific node I am looking for
const data = allResults[1].results.relatedRecordGroups[0].relatedRecords[0].attributes.dod;
console.log(data); // Shows correctly as the data I am looking for
return data;
}).catch(function(data){
console.log('there might be data missing', data);
});
}
Run Code Online (Sandbox Code Playgroud)
删除 ASYNC 运算符会导致在getRelatedRecords()
包含函数之后触发和/或返回不包含数据的“ZoneAwarePromise”。我需要getRelatedRecords()
先触发,然后再运行其余的代码。
如果需要,我可以提供更多片段。
您还需要返回此:
await Promise.all(allRelationshipQueries).then(allResults => {
console.log('Inside the Promise');
// The Specific node I am looking for
const data = allResults[1].results.relatedRecordGroups[0].relatedRecords[0].attributes.dod;
console.log(data); // Shows correctly as the data I am looking for
return data;
})
Run Code Online (Sandbox Code Playgroud)
return
上面的块中正在返回,但所有这些都在箭头函数的范围内,因此then(allResults => {
您还需要像这样返回此函数:
return await Promise.all(allRelationshipQueries).then(allResults => {
方法#2:第二种方法是将其存储到变量中,如下所示:
let dataToReturn = await Promise.all(allRelationshipQueries).then(allResults => {
console.log('Inside the Promise');
// The Specific node I am looking for
const data = allResults[1].results.relatedRecordGroups[0].relatedRecords[0].attributes.dod;
console.log(data); // Shows correctly as the data I am looking for
return data;
}).catch(function(data){
console.log('there might be data missing', data);
});
return dataToReturn;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4196 次 |
最近记录: |