我有一个关于所包含函数的同步运行的问题。例如,我有以下代码。
partitions(dataset, num_of_folds, function(train, test, fold) {
train_and_test(train,test, function(err, results)
{
})
})
其中 partitions
运行 num_of_folds
次,对于不同的折叠,它返回不同的训练集和测试集。我想仅在 train_and_test
完成时运行分区的每次迭代。如何做到这一点?
最佳答案
鉴于您之前的问题:Optimum async flow for cross validation in node.js ,我知道 partition
是您自己的函数,它将数据集分成几个部分,然后为每个部分运行回调(这里基本上是 train_and_test
)。
您现在的问题是 train_and_test
是异步的,但您希望等待每个调用完成(我认为这是通过调用其自己的回调来发出信号的),然后再运行下一个调用。
一个简单的解决方案是更改代码以保持状态,并从回调运行下一个调用。例如:
exports.partitions = function(dataset, numOfPartitions, callback) {
var testSetCount = dataset.length / numOfPartitions;
var iPartition=0;
var iteration = function() {
if (iPartition<numOfPartitions)
{
var testSetStart = iPartition*testSetCount;
var partition = exports.partition(dataset, testSetStart, testSetCount);
callback(partition.train, partition.test, iPartition, iteration);
iPartition++;
}
};
iteration();
};
然后,您需要将附加回调传递给异步函数:
partitions(dataset, num_of_folds, function(train, test, fold, callback) {
train_and_test(train,test, function(err, results)
{
callback();
})
});
请注意,我尚未测试上面的任何代码。
关于javascript - 包含的功能同步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34495663/