Próbuję załadować i przeanalizować plik, ale mam problem z wywołaniem dwóch funkcji i zwróceniem wyniku za obietnicę. Używam obietnic Bluebird. Poniższy kod działa zgodnie z oczekiwaniami:Przyrzeczenie obietnicy dodaje nowe wywołanie funkcji do łańcucha
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]);
....
podzieliłem funkcję parseFile.parse
na dwa sposoby, parseFile.parse
i parseFile.getProp
. parseFile.getProp
powinien pobrać dane wyjściowe z parseFile.parse
i zwrócić to, co zostało zwrócony parseFile.parse
, zanim metoda zostanie podzielona. Oto moja próba użycia obu funkcji:
run = function (filePath) {
return Promise.join(
fs.readFileAsync(filePath, 'utf8')
.then(parseFile.parse.bind(null, 'userKey'))
.then(parseFile.getProp.bind(null,'key')),
users.getUsersAsync(usersObj)
.then(users.modifyRec.bind(null, process.env.users))
).then(function (args) {
return runProc('run', args[0], args[1]);
....
ale to nie działa. Co ja tu robię źle?
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
};
co nie działa? Czy otrzymujesz jakieś błędy, czy też 'args' ma nieoczekiwaną wartość? –
@ChrisHunt - problem polega na tym, że getProp jest wywoływany przed funkcją parsowania, to powoduje problem ... –
Czy 'parsowanie' jest synchroniczne, czy zwraca obietnicę, która rozwiązuje poprawną wartość? Czy możesz podać swój kod 'parseFile'? Po prostu robi szybki test z czymś w rodzaju 'Promise.resolve(). Then (function() {console.log (" 1 ");} then. Then then (function() {console.log (" 2 ");}) ; 'pokazuje, że pierwsza funkcja powinna być uruchomiona przed sekundą, więc nie może to być sama obietnica powodująca problem. –