Ich habe einen Code, der im Grunde so etwas wie diesesJavascript - rufen zwei asynchrone Funktionen sequentiell
class foo {
constructor() {
// calling a, b, c synchronously
a().then(
function(response) {
b().then(
function(response) {
c();
}, function(error) {
// pass
}
);
}, function(error) {
// pass
}
);
}
a() {
return new Promise(function(fullfill, reject) {
// x is any function that returns a promise, making the
// implementation of this function "a" asynchronous
x().then(
function(response) {
fullfill(response);
}, function(error) {
reject(error);
}
);
});
}
b() {
return new Promise(function(fullfill, reject) {
// x is any function that returns a promise, making the
// implementation of this function "b" asynchronous
x().then(
function(response) {
fullfill(response);
}, function(error) {
reject(error);
}
);
});
}
c() {
// do something
}
}
sieht, habe ich zwei Funktionen a
und b
die sowohl asynchron sind. Diese Funktionen sind asynchron, weil sie beide eine Funktion x
aufrufen, die ein Versprechen zurückgibt (in meinem Fall ist es eine Abfrage an eine Datenbank).
Ich muss a
anrufen, gefolgt von b
gefolgt von c
aber nacheinander. Ein Weg, dies zu tun, ist das, was ich im obigen Code implementiert habe, aber es führt zu verschachtelten Versprechensantworten.
Gibt es eine andere Möglichkeit, dass ich das gleiche Ergebnis erreichen kann, ohne die folgende Syntax zu verwenden (denn wenn das die einzige mögliche Lösung ist, dann könnte ich sie auch gar nicht verwenden).
Verwenden Sie Versprechen Verkettung http://StackOverflow.com/Questions/34696696/chain-Promises-in-Javascript – M14
@ATMD Ja. 'a',' b' und 'c' sind Funktionen, die ich geschrieben habe. Aber sie alle stellen Abfragen an eine Datenbank und diese Abfragen sind asynchron. Und ich habe keine Kontrolle über diese Fragen. – ironstein
Was @m14 gesagt hat, mach einfach 'a(). Dann (b) .then (c);'. –