Я новичок в узле и хочу вызвать функцию и определить, следует ли вызывать следующую функцию на основе результатов первой функции. Функции асинхронны, поэтому результаты не сразу известны. Следующий код работает отлично, но теперь я хочу добавить больше асинхронных функций и объединить их все вместе.Q обещание - как его использовать?
var doSomething = require('./custom-module1.js'); //returns a boolean
var doAnotherThing = require('./custom-module2.js'); //returns a double
var var1 = process.argv[2];
var var2 = process.argv[3];
var var3 = process.argv[4];
doSomething(var1, var3, function(data) {
if (data) {
doAnotherThing(var1,var2, function(data){
console.log(var1 + ' is value: ' + data);
});
}
});
Я хочу сделать код примерно так, используя обещания.
getListOfStuff()
.then(
for(i=0;i<data.length;i++) {
doSomething(data[i], var3)
.then(
if (doSomething returns true) {
doAnotherThing(data[i], var2)
.then(doYetAnotherThing(data[i]))
.then(andEvenMoreThingsToBeDone(data[i]))
}
);
}
);
Я прочитал о q и использовал denodefiy, но я не могу понять синтаксис, чтобы заставить его работать. Было бы лучше изменить мои пользовательские модули, чтобы вернуть обещания, чтобы они были неотъемлемо отныне? Я получаю концепцию, но не синтаксис, как я на самом деле это делаю?
Я попытался denodeify, используя следующие две различные обозначения.
var doSomethingDN = Q.denodeify(doSomething);
var doAnotherThingDN= Q.denodeify(doAnotherThing);
doSomethingDN(var1, var3)
.then(
if(!data) {
doAnotherThingDN(var1,var2)
}
);
И это один
var doSomethingDN = Q.nfbind(doSomething);
var doAnotherThingDN= Q.nfbind(doAnotherThing);
doSomethingDN (var1, var3)
.then(
if(!data) {
doAnotherThingDN(var1,var2)
}
);
Условный прибудете это неожиданный маркер ошибки. Если я удалю, то оба запускаются, но логический результат doSomething не может контролировать поток программы.
Похоже, вы просите общий учебник по добавлению обещаний к асинхронному коду, который не использует обещания. Об этом уже написано много, так что нам было бы легче помочь вам, если бы вы поняли, что конкретно вы не понимаете в этом процессе. Вопросы здесь не очень хорошо работают, если так открыто, что они, похоже, просят учебник общего назначения. – jfriend00
"* Было бы лучше изменить мои пользовательские модули, чтобы возвращать обещания, чтобы они были неотъемлемо отныне? *" - Да, определенно – Bergi
Возможно, посмотрите [Как преобразовать существующий API обратного вызова в обещания?] (Http: //stackoverflow.com/q/22519784/1048572) – Bergi