gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:06:44 25 4
gpt4 key购买 nike

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

最佳答案

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

您不需要在循环中使用 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...
}

关于javascript - 在 Nodejs 中按顺序循环和处理两个 REST API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52364609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com