Ich versuche, eine Datei zu laden und zu analysieren, habe aber einige Probleme beim Aufruf von zwei Funktionen und die Rückgabe des Ergebnisses für das Versprechen. Ich benutze Bluebird-Versprechen. Der folgende Code funktioniert wie erwartet:Promise beitreten hinzufügen neue Funktionsaufruf an die Kette
run = function (filePath) {
return Promise.join(
fs.readFileAsync(filePath, 'utf8')
.then(parseFile.parse.bind(null, 'userKey')),
users.getUsersAsync(usersObj)
.then(users.modifyRec.bind(null, process.env.users))
).then(function (args) {
return runProc('run', args[0], args[1]);
....
ich die parseFile.parse
Funktion in zwei Verfahren aufgeteilt haben, parseFile.parse
und parseFile.getProp
. parseFile.getProp
sollte die Ausgabe von parseFile.parse
nehmen und zurückgeben, was parseFile.parse
zurückgegeben, bevor die Methode aufgeteilt wurde. Hier ist mein Versuch, beide Funktionen zu verwenden:
aber es funktioniert nicht. Was mache ich hier falsch?
UPDATE
var ymlParser = require('yamljs');
var ymlObj;
parse = function (data) {
"use strict";
if (!ymlObj) {
ymlObj = ymlParser.parse(data);
}
return ymlObj;
};
getProcWeb = function() {
return ymlObj.prop.web;
};
module.exports = {
parse: parse,
getProp: getProp
};
Was nicht funktioniert? Erhalten Sie irgendwelche Fehler, oder haben "Argumente" einen unerwarteten Wert? –
@ChrisHunt - das Problem ist, dass die getProp vor der Parse-Funktion aufgerufen wird, dies das Problem verursachen ... –
Ist synchrone "Parse", oder gibt es eine Zusage, die auf den richtigen Wert verrechnet? Können Sie Ihren 'parseFile' Code bereitstellen? Mach einfach einen Kurztest mit etwas wie 'Promise.resolve(). Dann (function() {console.log (" 1 ");}). Dann (function() {console.log (" 2 ");}) ; 'zeigt, dass die erste Funktion vor der zweiten ausgeführt werden sollte, so dass möglicherweise nicht die Promises selbst ein Problem verursachen. –