我实现了以下两个 promise :
function getUserSportListPromise(_uid){
return firebase.database().ref('users/' + user.uid + '/sports/').once('value').then(function(snap){
var userSportList = [];
if(snap.exists()){
snap.forEach(function(sport){
userSportList.push(sport.val().name);
});
}
return userSportList;
});
}
function getRegistrationsFromSportList(sportList){
var promiseHash = {};
sportList.forEach(function (sport){
promiseHash[sport] = firebase.database().ref('/sport_registrations/' + sport).once('value');
});
return $q.all(promiseHash);
}
为什么此代码显示结果:
var userSportListPromise = getUserSportListPromise(user.uid);
var registrationHashPromise = userSportListPromise.then(function(sportList){
return getRegistrationsFromSportList(sportList);
}).then(function(registrationsHash){
angular.forEach(registrationsHash, function(regsSnap, sport){
console.info(sport + ' has the following registrations: ');
console.dir(regsSnap);
});
});
而此代码显示未定义:
getUserSportListPromise(user.uid)
.then(function(sportList){
getRegistrationsFromSportList(sportList);
})
.then(function(registrationsHash){
angular.forEach(registrationsHash, function(regsSnap, sport){
console.dir(registrationsHash);
console.info(sport + ' has the following registrations: ' + regsSnap);
});
});
函数 getUserSportListPromise 返回一个 promise 的哈希值,那么为什么上面的代码在最后一个 then() 调用中传递了一个未定义的 RegistrationsHash 呢?
最佳答案
您在这里缺少返回
:
.then(function(sportList){
getRegistrationsFromSportList(sportList);
})
该匿名函数没有 return 语句,因此它返回 undefined
。应该是:
.then(function(sportList){
return getRegistrationsFromSportList(sportList);
})
或者只是:
.then(getRegistrationsFromSportList)
关于javascript - 返回 promise 方式的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971150/