gpt4 book ai didi

javascript - 返回 promise 方式的差异

转载 作者:行者123 更新时间:2023-11-28 18:14:30 25 4
gpt4 key购买 nike

我实现了以下两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com