各サブプロジェクトを横断してラリーから詳細を取得しようとしています。NodeJS再帰約束ラリー
しかし、最後にconsole.log(出力)がありますが、何も印刷されません。配列にプッシュした直後に出力を出力すると、その値を見ることができます。私はここで間違って何をしていますか?
function getProjects(projectRef, output) {
var deferred = Promise.defer();
callAc(projectRef, ['FormattedID', 'Name', 'Children', 'Parent', 'TeamMembers'], function(result) {
result.Object.Results.forEach(function(item) {
output.push(item.Name);
getProjects(item.Children._ref.split('webservice/v2.0')[1], output)
.then(function() {
deferred.resolve();
});
});
});
return deferred.promise;
}
function callAc(ref, parameters, callback) {
restApi.get({
ref: ref,
fetch: parameters,
scope: {
workspace: '/workspace/XXXX'
},
requestOptions: {}
}).then(function(result) {
callback(result);
}).fail(function(errors) {
console.log(errors);
});
}
var output = [];
var projectRef = '/Project/<some_project_id>/Children';
getProjects(projectRef, output)
.then(function() {
console.log('fetched all projects');
console.log(output);
});
出典:https://mostafa-samir.github.io/async-recursive-patterns-pt2/
です。その場合、 'getProjects'の最後の呼び出しで作成された約束は決して解決されないので、' getProjects'の最初の呼び出しで作成された全体的な約束は決して解決されないので、 'then'コールバックは決して呼び出されません。 –