【发布时间】:2023-02-04 09:58:34
【问题描述】:
我正在使用节点。我有一个 api 设置作为 netlify 无服务器函数,这样我就可以并行运行多个进程。
作为其中的一部分,我想要创建一个未执行的获取对象承诺的数组,然后我可以使用类似的东西并行执行它:
const responses = await Promise.allSettled(promiseArray);
到目前为止我有:
for (let i = 0; i < groupedRecords.length; i++) {
const groupedRecord = groupedRecords[i];
const fetchObjects = await createFetchObjectArray(groupedRecord);
}
async function createFetchObjectArray(records) {
const fetchURL = (obj) => fetch('http://localhost:8888/.netlify/functions/meta1', {
method: 'POST',
body: JSON.stringify(obj),
headers: { 'Content-Type': 'application/json' }
});
let outputArray = [];
for (let i = 0; i < (records.length); i++) {
const record = await records.pop();
const obj = { "_id": record._id };
const fetchObj = fetchURL(obj);
outputArray.push(fetchObj);
}
return outputArray;
}
我希望将一系列承诺放入“fetchObjects”中,但它们似乎正在尝试执行。我正在看:
FetchError: request to http://localhost:8888/.netlify/functions/meta1 failed, reason: connect ECONNREFUSED 127.0.0.1:8888
如何防止获取对象执行?
【问题讨论】:
-
groupedRecords是什么数据结构? -
await records.pop()真的没有意义。你传递的是什么records? -
“然后我可以使用
Promise.allSettled之类的东西并行执行“ - 你误解了承诺的工作方式。你不能“执行”它们,它们不是函数。你所能做的就是等待它们。这也是Promise.allSettled所做的:它创建了一个新的承诺等待所有输入都承诺结算。根本不可能“阻止获取对象执行" - 呼叫fetch()执行函数,它返回一个让你等待结果的承诺。
标签: javascript node.js promise fetch