Ich versuche, eine asynchrone Schleife mit nativen ES6 promises Es Art von funktioniert, aber falsch. Ich glaube, ich machte einen großen Fehler irgendwo und ich brauche jemanden, der mir zu sagen, wo es ist und wie es richtigSchleife mit nativen Versprechungen;
var i = 0;
//creates sample resolver
function payloadGenerator(){
return function(resolve) {
setTimeout(function(){
i++;
resolve();
}, 300)
}
}
// creates resolver that fulfills the promise if condition is false, otherwise rejects the promise.
// Used only for routing purpose
function controller(condition){
return function(resolve, reject) {
console.log('i =', i);
condition ? reject('fin') : resolve();
}
}
// creates resolver that ties payload and controller together
// When controller rejects its promise, main fulfills its thus exiting the loop
function main(){
return function(resolve, reject) {
return new Promise(payloadGenerator())
.then(function(){
return new Promise(controller(i>6))
})
.then(main(),function (err) {
console.log(err);
resolve(err)
})
.catch(function (err) {
console.log(err , 'caught');
resolve(err)
})
}
}
new Promise(main())
.catch(function(err){
console.log('caught', err);
})
.then(function(){
console.log('exit');
process.exit()
});
nun den Ausgang getan:
/usr/local/bin/iojs test.js
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
fin
error: [TypeError: undefined is not a function]
error: [TypeError: undefined is not a function]
error: [TypeError: undefined is not a function]
error: [TypeError: undefined is not a function]
error: [TypeError: undefined is not a function]
error: [TypeError: undefined is not a function]
error: [TypeError: undefined is not a function]
caught [TypeError: undefined is not a function]
exit
Process finished with exit code 0
Das gute Teil: es das Ende erreicht.
Der schlechte Teil: Es fängt einige Fehler und ich weiß nicht warum.
Unabhängig davon, welche Bibliotheken verwendet werden, ist die Art, wie Sie Versprechen verwenden, _really_ seltsam. Was ist dein Endziel hier? Sie möchten eine "Weile" mit Versprechen umsetzen? –
'.then (main(), function (err) {'. Wann ist das 'main()' da? –
Du hast vergessen zu sagen, was dieser Code machen soll. – JLRishe