Node.js 循环节点异步

Node.js 循环节点异步,node.js,asynchronous,Node.js,Asynchronous,我有一个包含异步函数的简单for循环,我的问题是循环遍历所有值,然后只执行其中的异步函数 for(key in splitedDataArray){ calculatePower(splitedDataArray[key]); var octopusMAC = getOctopusIDFromRaw(splitedDataArray[key]); var channelID = getChannelIDFromRaw(splitedDataArray[key]);

我有一个包含异步函数的简单for循环,我的问题是循环遍历所有值,然后只执行其中的异步函数

for(key in splitedDataArray){
    calculatePower(splitedDataArray[key]);
    var octopusMAC = getOctopusIDFromRaw(splitedDataArray[key]);
    var channelID = getChannelIDFromRaw(splitedDataArray[key]);
    console.log("outside")
    getChannelCTSize(octopusMAC, channelID, function (result) {
        console.log("inside")
        var timestamp = convertDateTimeToInt(transmission.date);
        var adcTicks = getAdcTicksFromRaw(splitedDataArray[key]);
        var power = convertAdcTicksToAmps(parseInt(adcTicks, 16), result);
        console.log("channelID: " + channelID + " ADC ticks HEX: " + adcTicks + " timestamp: " + timestamp + " power for " + result + "A CT Size: " + power);
    });
}
所以它为数组中的每个元素打印外部,然后只打印内部,在所有的输出之后,我想要一个外部,然后是内部,等等。我已经看过了,但我不确定如何用我的代码实现这一点。

您可以使用,但这不是最好的解决方案。若我是你们,我会尝试将for循环中的所有内容移动到一个函数中,这样你们就可以看到里面的所有变量。 更像这样:

function calculate(value){
    calculatePower(value);
    var octopusMAC = getOctopusIDFromRaw(value);
    var channelID = getChannelIDFromRaw(value);
    console.log("outside")
    getChannelCTSize(octopusMAC, channelID, function (result) {
        console.log("inside")
        var timestamp = convertDateTimeToInt(transmission.date);
        var adcTicks = getAdcTicksFromRaw(value);
        var power = convertAdcTicksToAmps(parseInt(adcTicks, 16), result);
        console.log("channelID: " + channelID + " ADC ticks HEX: " + adcTicks + " timestamp: " + timestamp + " power for " + result + "A CT Size: " + power);
    });
}

for(key in splitedDataArray){
    calc(splitedDataArray[key]);
}
它不会输出:out/in/out/in,但会在每个循环中获得良好的值。
如果您需要订单/out/in/out/in,我会从lodash购买每个系列。

那么您希望您的呼叫以系列方式运行吗?在不使用任何外部库的情况下,最简单的方法是创建递归函数。选中
async。每个