【问题标题】:Unexpected promise instead of array意外的承诺而不是数组
【发布时间】:2023-01-26 01:47:14
【问题描述】:

我正在使用节点和 mongo。我正在尝试使用 netlify 无服务器函数运行一系列并行请求,我正在尝试使用 mongo 记录创建构建。到目前为止我有:

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);

我期待输出数组包含构造的获取请求,但我看到的是:

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

为什么我得到的是承诺而不是预期的数组?

【问题讨论】:

  • fetch 是一个异步函数,所以它返回一个Promise

标签: javascript node.js asynchronous


【解决方案1】:

您可以等待所有 Promise 完成 Promise.all

Promise.all(outputArray).then(result => {
    console.log(result);
    // use result here
});

【讨论】:

    【解决方案2】:

    fetch 返回请求的承诺。如果您希望请求的响应在您的outputArray中,您需要将outputArray.push(fetchURL(obj));更改为fetchUrl(obj).then(response =&gt; outputArray.push(response));

    这会等待 fetch 调用完成,然后获取响应并将其放入您的数组中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-03
      • 2021-01-11
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多