在函数内部我有类似的东西
function() {
var User = new Models.CommerceUser();
var userPromise = User.fetch();
userPromise
.done(function() {
console.log('user fetched')
var CommerceCollection = new Models.CommerceCollection();
var commercePromise = CommerceCollection.fetch({
data: {
noCursor: true
}
});
commercePromise
.done(function() {
console.log('commerces fetched')
var ActiveOffersCollection = new Models.ActiveOffersCollection();
var activeOffersPromise = ActiveOffersCollection.fetch();
activeOffersPromise
.done(function() {
console.log('activeOffers fetched')
initVariables();
})
.error(function() {
console.error('Error while getting commerces')
});
})
.error(function() {
console.error('Error while getting commerce')
})
})
return result;
}
我不希望在所有回调完成之前返回,但我真的不知道该怎么做。
对于那些提出要求的人......这些是骨干模型,这就是我承诺的原因:)
提前致谢
答案 0 :(得分:1)
您没有选择这样做。您调用的操作是异步的,因此如果您自己的代码依赖于它们的结果,则它无法以同步方式工作。
不考虑return result
(这样做了什么?在任何地方都没有定义result
!),您应该将代码重组为管道。从函数的内容开始:
userPromise
.done(function() {
console.log('user fetched')
var CommerceCollection = new Models.CommerceCollection();
var commercePromise = CommerceCollection.fetch({
data: {
noCursor: true
}
});
commercePromise
.done(function() {
console.log('commerces fetched')
var ActiveOffersCollection = new Models.ActiveOffersCollection();
var activeOffersPromise = ActiveOffersCollection.fetch();
activeOffersPromise
.done(function() {
console.log('activeOffers fetched')
initVariables();
})
.error(function() {
console.error('Error while getting commerces')
});
})
.error(function() {
console.error('Error while getting commerce')
})
})
而不是等待每个承诺完成然后安排下一步(这里有三个级别),用then
组成管道:
// error checking elided
return new Models.CommerceUser().fetch()
.then(function() { return new Models.CommerceCollection().fetch(...); })
.then(function() { return new Models.ActiveOffersCollection.fetch(...); })
.then(initVariables);
从你的函数和更多的链代码返回新的组合承诺。