簡體   English   中英

如何在快遞中等待 http 請求

[英]How to await http requests in express

我試圖讓服務器根據從表單獲得的參數列表進行一系列 API 調用。 但是,使用異步 http get 方法或 npm got library 我無法讓我的代碼在嘗試呈現響應之前等待 API 調用的響應。 我的代碼如下所示:

router.post('/getPolicies', async function(req, res, next){
  let issnList = req.body.issn_list
  issnList = issnList.split(/\r?\n/)
  await getPolicies(issnList);
  res.render("policy", {data:policies})
});
async function getPolicies(issns){
  for (let i = 0; i<issns.length; i++){
      url = "some_url"+ issns[i]
      const {data} = await got.get(url).json();
      constructDataSet(issns[i], data)
  }
}
function constructDataSet (issn, data){
  //...
  //get some information out of a json and construct a new json with data in needed format
}

我得到的錯誤是“無法讀取未定義的屬性”,因為它正在嘗試讀取“數據”json 的屬性,但尚未得到它。

我認為這是因為您在應該異步時同步遍歷列表。 下面是兩個差異實現,for await 循環相信在 es6 中可用,第二個將是替代實現。

 router.post('/getPolicies', async function(req, res, next){ let issnList = req.body.issn_list issnList = issnList.split(/\r?\n/) await getPolicies(issnList); res.render("policy", {data:policies}) }); // Prefer async function getPolicies(issns){ for await (const issns of issns){ let url = "some_url" + issn; const {data} = await got.get(url).json(); constructDataSet(issns, data) } } async function getPoliciesV2(issns) { await forEach(issns, (issn) => { let url = "some_url" + issn; const {data} = await got.get(url).json(); constructDataSet(issns, data); }); } async function forEach(data, callback) { for(let i = 0; i < data.length; i++) { callback(data[i]); } } function constructDataSet (issn, data){ //... //get some information out of a json and construct a new json with data in needed format }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM