簡體   English   中英

在 node.js 中以正確的順序運行代碼

[英]Running code in the proper order in node.js

我正在制作一個根據用戶興趣編譯文章的網站。 我有一個后端,但我無法讓代碼以正確的順序運行,基本上我有一個包含用戶的 MongoDB 數據庫,每個用戶都有一封電子郵件和一系列興趣。 代碼首先遍歷用戶,然后遍歷興趣並添加一定數量的文章以針對每個興趣推薦。 但是我需要在遍歷完所有興趣后將這些數據返回給客戶端,但我找不到這樣做的方法。 代碼:

  //? Get user emails and intrests
  UsersReference.find({}).toArray(function (err, users) {
    for (var i = 0; i < users.length; i++) {
      const user = users[i]
      //? Generate a text blurb for user based off there intresets
      var limit = 10 / user.intrests.length
      for (var j = 0;j < user.intrests.length;j++) {
        axios({
          "method": "POST",
          "url": "https://tidalwaves-news-analytics2.p.rapidapi.com/articles?limit=" + limit,
          "headers": {
            "x-rapidapi-host": "tidalwaves-news-analytics2.p.rapidapi.com",
            "x-rapidapi-key": "SECRET",
            "useQueryString": true
          },
          "data": {
            "url": {
              "query": user.intrests[j]
            },
          }
        }).then((res) => {
          for(var l =0;l < res.data.data.length;l++) {
            blurbs[i] = blurbs[i] + ". " + res.data.data[l].title
          }
        }).catch((err) => {
          console.log(err)
        })
      }
}

您可以將邏輯包裝在async函數中並使用await關鍵字,而不是使用then()等待承諾履行。

這將使您的代碼更易於閱讀,並且可以解決您的問題。

例子:

async function myFunction() {
  for (const item of items) {
    const result = await axios({...});
    // Do something with `result`....
  }
}

暫無
暫無

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

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