You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node+Mongo构建Netlify无服务器函数:为何返回Promise而非预期数组?

问题:为何得到的是Promise而非预期的数组?

开发场景

我正在使用Node与Mongo进行开发,尝试基于Mongo记录,通过Netlify无服务器函数发起一系列并行请求,目前的代码如下:

paralellNum = 2;

const filter = { 'Parcel': { $regex: '[0-9]' }, 'UseCode': { $exists: false } };
let records = await collection.find(filter).limit(firstNum).toArray()
console.log('number of records selected from db: ', records.length);

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 < (paralellNum-1); i++) {
  const record  = records.pop();
  const obj = {"_id":record._id,"apn":record.Parcel};
  outputArray.push(fetchURL(obj));
} 

console.log(outputArray);

实际输出

原本预期outputArray中包含构造好的fetch请求,但实际得到的却是:

1) [Promise]
0:
Promise {[[PromiseState]]: 'pending', [[PromiseResult]]: undefined, 
Symbol(async_id_symbol): 59, Symbol(trigger_async_id_symbol): 58}
length:1

请问为何我得到的是Promise而非预期的数组?


解答

这是因为**fetch本身就是异步函数**,只要调用它,就会立刻返回一个Promise对象,而不是直接返回请求结果或者“构造好的请求”。

你代码里的fetchURL(obj)本质就是调用fetch,所以每次push到数组里的都是fetch返回的Promise,这就导致outputArray是一个装着Promise的数组,而非你想象的“请求实例”数组。

如果想要拿到这些并行请求的最终结果,需要用Promise.all等待所有Promise完成,比如:

// 等待所有并行请求完成
const results = await Promise.all(outputArray);
console.log(results); // 这里才是请求返回的结果数组

另外你代码里的循环条件是i < (paralellNum-1),当paralellNum=2时,循环只会执行1次,所以数组里只有1个Promise,这和你输出的length:1对应。如果想发起2个并行请求,应该把条件改成i < paralellNum。


内容的提问来源于stack exchange,提问作者user1592380

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:02:43