bauen Ich versuche, meinen Kopf um Versprechen (ein gemeinsames Thema, ich weiß). Ich habe die grundlegenden Ideen, aber ich habe Probleme, sie zu implementieren.ein Objekt basierend auf Ergebnis des Versprechens Anruf
Ich versuche, ein Objekt zu erstellen, das eine Reihe von Funktionen basierend auf dem Inhalt eines Verzeichnisses verfügbar macht. Ich benutze Bluebird, um die FS-Bibliothek zu promisifizieren. Lesen Sie dann die Dateien des Verzeichnisses ein, erstellen Sie die Objekte und geben Sie das Ergebnis zurück.
var Promise = require('bluebird'),
fs = Promise.promisifyAll(require('fs'));
var services = {};
return fs.readdirAsync('./path/to/file/')
.each(function (filename) {
//trim off the file extension and assign the export function
services[filename.replace(/\.[^/.]+$/, "")] = function(request) {
request.esbOperation = filename;
otherFunctionCall(request);
}
})
.then(function() {
return {services: services};
})
.catch(function(err){
console.log(err);
});
Ich habe eine Vielzahl von Dingen versucht, aber das zurückgegebene Objekt sieht in der Regel wie folgt aus:
Promise {
_bitField: 167772160,
_fulfillmentHandler0: undefined,
_rejectionHandler0:
{ services:
{ function1: [Function],
function2: [Function],
function3: [Function],
},
_promise0: undefined,
_receiver0: undefined }
Wie kann ich das Ergebnis bei der Erfüllung Handler bekommen? Wie erhalte ich die Rückgabe des aufgelösten Objekts anstelle des Promise-Objekts (ich habe versucht, an verschiedenen Stellen aufzulösen/abzulehnen, aber ich mache es falsch)?
Sie dies nicht tun. Sie geben das Versprechen zurück (was Sie sehen, da es bereits funktioniert). Dafür sind sie gemacht. Sie können nicht sofort ein Ergebnis zurückgeben, das in der Zukunft berechnet wird. – Bergi
@Bergi Warum ist es im Ablehnungshandler? – GForce
@GForce Ich konnte nicht sagen, warum Ihr Objekt in der '_rejectionHandler0'-Eigenschaft gespeichert ist, aber Sie sollten nicht versuchen, Werte aus den internen Eigenschaften des Versprechens zu erhalten. Sie sollten '.then()' und/oder '.catch()' aufrufen, um damit zu arbeiten. – JLRishe