0
我已经把我的用例的一个小例子,见下面(的jsfiddle:https://jsfiddle.net/BWNba/165/):问题与Q.all,它不会等待所有承诺完成
基本上Q.all只会工作当最大的工作首先被处理时正确。我在这里做了什么来让这个工作正常吗?
function findPersonWithId(id) {
var deffered = Q.defer();
setTimeout(function(){
var newPerson = {id: 123}
deffered.resolve(newPerson)
},300)
return deffered.promise;
}
function loadHobbies(person) {
var deffered = Q.defer();
setTimeout(function(){
person.hobbies = ['programming', 'surfing', 'cooking']
deffered.resolve(person)
},100)
return deffered.promise;
}
function loadAddress(person) {
var deffered = Q.defer();
setTimeout(function(){
person.address = 'Melbourne, Australia'
deffered.resolve(person)
},200)
return deffered.promise;
}
function loadPersonalDetails(person) {
var deffered = Q.defer();
setTimeout(function(){
person.name = 'Bob'
person.age = 99
person.gender = 'male'
deffered.resolve(person)
},300)
return deffered.promise;
}
function loadRand(person) {
var deffered = Q.defer();
var rand = ~~(Math.random() * 1000)
setTimeout(function(){
person[rand] = rand
deffered.resolve(person)
},rand)
return deffered.promise;
}
function getPersonChain() {
return findPersonWithId(123)
.then(loadHobbies)
.then(loadAddress)
.then(loadPersonalDetails)
}
function getPersonQAllSmFirst() {
return findPersonWithId(123)
.then(function(person){
return Q.all(
loadHobbies(person),
loadAddress(person),
loadPersonalDetails(person)
)
})
}
function getPersonQAllLgFirst() {
return findPersonWithId(123)
.then(function(person){
return Q.all(
loadPersonalDetails(person),
loadHobbies(person),
loadAddress(person)
)
})
}
getPersonChain()
.done(function(person){
$('.person').append(JSON.stringify(person))
})
getPersonQAllSmFirst()
.done(function(person){
$('.person2').append(JSON.stringify(person))
})
getPersonQAllLgFirst()
.done(function(person){
$('.person3').append(JSON.stringify(person))
})
好像这个作品中的jsfiddle。但在我的节点应用程序中不会。我的电话是sql查询的地方... – Sid
然后我们需要看到原始代码,因为可能你的例子并不是你正在做的事情的正确类比。这些SQL查询是否有承诺? –
是的,他们是承诺。 – Sid