Ich habe ein Versprechen innerhalb eines anderen Versprechen wie folgt aussehen verschachtelt:Promises aus, um
adb.screencap(list, id).then(function(missing) {
adb.getScreens(list, id).then(function() {
res.render('screencap', {output: "Screens captured."})
})
})
Wo adb.screencap und adb.getScreens ist:
adb.screencap = function(list, id){
return new Promise(function (resolve, reject) {
var array = new Array();
var promises = new Array();
for (var i = 0; i < list.length; i++) {
var cmd = "adb -s " + list[i] + " shell screencap /sdcard/" + list[i] + "-" + id + ".png";
var missing = new Array();
console.log("== " + cmd);
promises.push(adb.openArray(i, array, list, cmd, missing));
}
Promise.all(promises).then(function (missing) {
console.log(("resolve"));
resolve(missing);
})
})
}
adb.getScreens = function(list, id){
return new Promise(function (resolve, reject){
for (var i = 0; i < list.length; i++) {
var cmd = 'adb -s ' + list[i] + ' pull /sdcard/' + list[i] + "-" + id + ".png /home/IdeaProjects/DeviceServer/public/files/" + list[i] + "-" + id + ".png";
exec(cmd, function (err, stdout, stderr) {
console.log(stdout);
console.log(cmd);
});
}
resolve();
})
}
Gibt es einen Grund, warum die adb.getScreens Versprechen wird abgeschlossen, bevor das adb.screencap-Versprechen gegeben wird?
Ah die Freude der Versprechen :) Ich kann keine direkte Hilfe bieten, da es meinem Gehirn weh tut, aber es gibt einen nützlichen Link [https://developers.google.com/web/fundamentals/getting-started/primers/ Versprechungen] – DaveOz
Das ist unmöglich. Der Callback, der den Aufruf von 'adb.getScreens' enthält, wird nur ausgeführt * nachdem *' adb.screencap' aufgelöst wurde. Bitte geben Sie mehr (oder genauere) Informationen zu diesem Problem an. Was lässt dich glauben, dass ein Versprechen vor dem anderen endet? –
FWIW, erstellen Sie kein neues Versprechen in 'adb.screencap' (' neues Versprechen (...); ') zurück, nur' return Promise.all (...) '. –