저에게 잘 맞는 체인 연결을 얻으려고합니다. 이 상황을 내가 모두 foo
및 bar
하고 서명을 제대로하려고 쓰고에서체인 연결 기능이 올바르게 생성됩니다.
promise.then(foo.then(bar));
:
promise.then(foo).then(bar);
과 :
나는 문제가 사이의 차이를 이해 귀결 생각 . bar
은 foo
에 의해 생성 된 반환 값을 사용합니다.
나는 후자가 있지만, 내 질문은 이전 작업을하기 위해 무엇을해야합니까?
위와 관련된 내용은 전체 코드 (아래)입니다. 나는 (기대 log1
, log2
, log3
, log4
, log5
하지만 log3
, log4
, log5
, log1
, log2
을 받고) 내가 기대하고있는 순서대로 인쇄 다른 로그가 없습니다. 위의 내용을 잘 이해하고 있기를 기대하고 있습니다.
var Promise = require('bluebird');
function listPages(queryUrl) {
var promise = Promise.resolve();
promise = promise
.then(parseFeed(queryUrl)
.then(function (items) {
items.forEach(function (item) {
promise = promise.then(processItem(transform(item)))
.then(function() { console.log('log1');})
.then(function() { console.log('log2');});
});
}).then(function() {console.log('log3')})
).then(function() {console.log('log4')})
.catch(function (error) {
console.log('error: ', error, error.stack);
});
return promise.then(function() {console.log('log5');});
};
두 번째 것은 잘못되었습니다. 'then'은 약속이 아니라 콜백을 인수로 사용합니다. – Bergi
@Bergi - 'then'에 또 다른 약속을하고 싶다면 콜백이 약속을 반환하는지 확인해야합니까? – Vineet
@Vineet 예, Promise를 반환하는 함수를 전달해야합니다. Promise는 반환하지 않습니다. – nem035