Javascript 包含函数的同步运行
我有一个关于包含函数的同步运行的问题。例如,我有以下代码Javascript 包含函数的同步运行,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我有一个关于包含函数的同步运行的问题。例如,我有以下代码 partitions(dataset, num_of_folds, function(train, test, fold) { train_and_test(train,test, function(err, results) { }) }) 其中partitions运行num\u of\u folds次,对于不同的折叠,它返回不同的序列和测试集。我只想在train\u和\u test完成时运行分区的每个迭代。如何做到这一点
partitions(dataset, num_of_folds, function(train, test, fold) {
train_and_test(train,test, function(err, results)
{
})
})
其中partitions
运行num\u of\u folds
次,对于不同的折叠,它返回不同的序列和测试集。我只想在train\u和\u test
完成时运行分区的每个迭代。如何做到这一点
我只想在train_和_测试完成时运行分区的每个迭代。如何做到这一点
这完全取决于partitions
如何调用您给予它的回调。如果partitions
正常调用回调,那么它将等待回调完成后再继续。但是,如果它是异步调用的,例如通过nextTick
或setTimeout
或类似方式调用,那么您能够告诉它等待的唯一方法就是提供一种告诉它等待的方法
如果我用另一种方式来理解你的问题:如果
train\u and\u test
是异步的,并且partitions
不是为处理异步回调而设计的,你不能让它等待。鉴于你前面的问题:,我理解partition
是你自己的函数,它将数据集分成几个部分,然后为每个部分运行回调(基本上是train\u和\u 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();
};
请注意,我没有测试上面的任何代码。分区在哪里/如何定义?我猜你是从图书馆得到的。哪一个?如果您正在处理一个异步调用,那么您需要使用循环或train_and_测试来更改代码。可能的重复
partitions(dataset, num_of_folds, function(train, test, fold, callback) {
train_and_test(train,test, function(err, results)
{
callback();
})
});