我有一个称为项目的项目列表,其中有两个文件夹ID。我想遍历项目列表,调用一个端点以获取文件夹1中的任务,然后调用一个端点以获取文件夹2中的任务,然后合并结果。我无法以上面描述的顺序方式运行此代码。我已经尝试过Promises和Aysnc / Await,但是我什么也做不了。这是我当前的代码:
function processAllTasks() {
var emptyPromise = Promise.resolve();
for(const Project of filteredProjects){
emptyPromise = emptyPromise.then(function() {
return getTasksForProjectFolderID(Project.FolderID1);
}).then(function(result) {
console.log(result);
array1 = result;
getTasksForProjectFolderID(Project.FolderID2).then(function(result2) {
console.log(result2);
array2 = result2;
})
});
}
}
其中Array1和Array2是我要稍后合并和处理的两个数组。它们在全局范围内定义。我的休息功能getTasksForProjectFolderID如下所示:
function getTasksForProjectFolderID(projectFolderID) {
return rp({
url: url + projectFolderID + '/tasks',
headers: headers
}).then(function(response) {
return response;
});
}
其中rp是const rp = require('request-promise');
答案 0 :(得分:1)
根据经验,应尽可能避免在全局范围内定义变量。如果您需要一个具有两个查询结果的对象,那么函数应该返回该对象。
您不需要在循环中答应即可解决此问题。您的getTasksForProjectFolderID()
已在处理异步调用以获取您的数据。
我会做这样的事情(这取决于您要如何构造返回数据):
function processAllTasks(filteredProjects) {
let results = {};
for (const projectID of filteredProjects) {
const taskList = getTasksForProjectFolderId(projectID)
results['Project.FolderID'] = taskList
}
return results;
}
现在您的结果对象看起来像这样
{
<First folder ID> : <Results of first query>,
<Second folder ID> : <Results of second query>,
etc...
}