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();
  })
});