在 Nodejs 中按顺序循环和处理两个 REST API 调用



我有一个名为项目的项目列表,有两个文件夹 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;
});
}

其中 rpconst rp = require('request-promise');

根据经验,尽可能避免在全局范围内定义变量。如果你需要一个包含两个查询结果的对象,那么这就是你的函数应该返回的。

你不需要循环中的承诺来解决这个问题。您的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...
}

最新更新