javascript - 返回 promise 方式的差异

标签 javascript angularjs promise

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

相关文章:

javascript - 丑陋的 AngularJS

javascript - 如何等待异步函数返回?

javascript - 如何找到在运行时定义变量的位置?

javascript - 如何使用 React 正确更新数组中的状态?

javascript - Drupal 网站页面缓慢(这与同一主题的其他问题不同)

ruby-on-rails - 正确的 $resource POST 参数到 Rails

node.js - promise 似乎没有按正确的顺序调用?

javascript - 如何使用 Promise 等待异步 API 调用

javascript - 在 promise 中循环直到另一个 promise 结束

计算整数阶乘的 JavaScript 函数