Я нахожусь в точке теста, где мне нужен цикл вложенных циклов, но я теряюсь со всей стороной Async. В основном, что происходит сейчас, я хочу перебирать массив и использовать значения один за другим и записывать выходные данные. Что происходит в настоящее время, так это то, что единственный регистрируемый вывод - это последние значения, которые я хочу использовать. Трудно объяснить, поэтому я буду показывать свой код.Вложенные для циклов в Node.js вместе с тестовой средой Mocha
// For the sake of it, all these values are strings
var arr1 = [ [1, 2, 3, 4], [2, 3, 4, 1], [3, 4, 2, 1], [4, 1, 2, 3] ];
var arr2 = [ [a, b, c, d], [b, c, d, a], [c, d, a, b], [d, a, b, c] ];
for(var i = 0; i < arr1.length; i++){
describe("Test", function(){
it("Does something", function(done){
for(var x = 0; x < arr2.length; x++){
it("Does something else", function(done){
// Do stuff with arr1[i], arr2[x] etc.
testFunc(arr1[i], arr2[x], function(returnValue){
assert.strictEqual(returnValue, true, "Passed!");
done();
}
});
}
});
});
}
Теперь, я не в состоянии заполнить в том, что код на самом деле делает (причины конфиденциальности), но если кто-то может указывать мне так, как я могу сделать эту работу (имеется в виду ожидания петли на обратный вызов от testFunc()
каждый раз).
Если мы говорим, что testFunc()
выглядит следующим образом:
function testFunc(arr1var, arr2var, callback){
console.log(arr1var + " and " + arr2var);
}
Когда я запускаю его, все, что я вижу, это конечные значения, передаваемые в консоли («3 и с»).
Я искал это для этого, но потому, что примеры людей настолько специфичны для их кода, что смущает попробовать и адаптироваться. Я посмотрел модуль Node.js Async
, но также не получил слишком далеко.
Если кто-то может говорить мне через все это шаг за шагом или переписать выше, чтобы работать так, как я хочу, я был бы признателен.
Кроме того, в моем фактическом коде мои массивы имеют разные размеры в верхней части - в случае, если это вызывает разницу.
Поскольку несколько человек указали на это, я просто добавлю, что я полностью открыт для предложений, если у кого есть лучший метод. Я буду запускать ~ 40 тестов, и это сократит его до 10-15 строк кода, а не 200, называя каждого по отдельности, так что, как думают люди, лучше всего, не стесняйтесь советовать мне.
Это похоже на реализацию O (n!). Вы уверены, что нет лучшего подхода? –
@TravisJ В моем фактическом коде мне нужно проверить 'arr1 [0]' рядом со всеми элементами в 'arr2', затем' arr1 [1] 'вдоль всех элементов в' arr2' и т. Д. Всего должно быть 40 тестов (в моем фактическом коде, а не здесь). Я не уверен, есть ли лучший способ, вы думаете, что он будет? – whitfin
Использование цикла для генерации тестов - это запах кода –