无法使用 JavaScript 承诺读取未定义的 属性 'then'

Cannot read property 'then' of undefined with JavaScript promises

我明白乍一看这可能看起来像重复的,但我已经看到了所有的答案告诉我把 return 放进去,但那是行不通的。

这是我的职能:

function removePastUsersFromArray(){
  pullAllUsersFromDB().then(function(users_array){
  var cookie_value = document.cookie.split('=') [1];
  const promises = []
    for (var i = 0; i < _USERS.length; i++) {
      if (_USERS[i].useruid == cookie_value){
      var logged_in_user = _USERS[i].useruid;
        promises.push(
          onChildValue(rootRef, 'users/' + logged_in_user + '/disliked_users/').then(formatUsers)
        )
        promises.push(
          onChildValue(rootRef, 'users/' + logged_in_user + '/liked_users/').then(formatUsers)
        )
      }
    }
    return Promise.all(promises);
  })
};

我在这个函数中得到了错误:

function displayRemovedPastUsersFromArray(){
  removePastUsersFromArray().then(function(promises){

基本上是说我的 removePastUsersFromArray 未定义。但它并不像上面清楚地存在和 return 的承诺那样??

basically saying that my removePastUsersFromArray is undefined

不,它说 removePastUsersFromArray() 调用 returned undefined,因为这就是你要调用 then 的原因。

it clearly exists above and returns promises?

它存在,是的,但它没有 return 任何东西。您拥有的 return 位于 then 回调内部,但函数本身没有 return 语句。 return 链接产生的承诺:

function removePastUsersFromArray() {
  return pullAllUsersFromDB().then(function(users_array) {
//^^^^^^
    var cookie_value = document.cookie.split('=') [1];
    const promises = []
    for (var i = 0; i < _USERS.length; i++) {
      if (_USERS[i].useruid == cookie_value){
        var logged_in_user = _USERS[i].useruid;
        promises.push(
          onChildValue(rootRef, 'users/' + logged_in_user + '/disliked_users/').then(formatUsers)
        );
        promises.push(
          onChildValue(rootRef, 'users/' + logged_in_user + '/liked_users/').then(formatUsers)
        );
      }
    }
    return Promise.all(promises);
  })
};