Node js-通过循环同步执行功能

时间:2018-11-23 07:52:15

标签: javascript node.js server-side-scripting

我有类似以下的代码

 {
     "kind": "youtube#videoListResponse",
     "etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/JJfz5-v19lUQxDHwldoSeJ-hK2Q\"",
     "pageInfo": {
      "totalResults": 1,
      "resultsPerPage": 1
     },
    "items": [
    {
     "kind": "youtube#video",
     "etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/xYxkZIT1J781N7xijLQef_3H6eg\"",
     "id": "aJOTlE1K90k",
     "status": {
      "uploadStatus": "processed",
      "privacyStatus": "public",
      "license": "youtube",
      "embeddable": true,
      "publicStatsViewable": true
     }
    }
  ]
}

在这种情况下,callWebsocket函数需要一个带有数组值的响应,这应该通过循环来实现。但是由于节点js的异步特性,因此在响应出现之前先调用callWebSocket函数。但是我有一个使用服务器端脚本的用例,我选择了节点js。在循环到位的情况下同步执行功能的任何帮助都可以救我。

1 个答案:

答案 0 :(得分:2)

您需要稍微修改callApi方法。试试这个:

async function getData()
{
   for(var i=0; i<someLength; i++)
   {
       if(i===0)
       {
          response = await callApi(someValue[i]);
       }
       else if(i===1)
       {
          responseInsert = callWebSocket(response, someValue[i]);
       }       
   }
}
function callApi(insertData)
{
  return axios({
  method: 'post',
  url: 'http://localhost:1130/services/request',
  data: insertData,
  headers: { 'content-type': 'application/xml;charset=utf-8' }
  });
}