我有类似以下的代码
{
"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。在循环到位的情况下同步执行功能的任何帮助都可以救我。
答案 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' }
});
}