使用JavaScript承诺

时间:2016-09-15 11:09:04

标签: javascript promise return undefined

我乍一看这可能看起来像是重复但我已经看到所有的答案告诉我要回来但是这不起作用。

这是我的功能:

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未定义。但它不是因为它明显存在于上面而且返回了承诺??

1 个答案:

答案 0 :(得分:10)

  

基本上说我的removePastUsersFromArray未定义

不,它表示removePastUsersFromArray()来电已返回undefined,因此您正试图致电then

  

它明显存在于上方并返回承诺?

它存在,是的,但它不返回任何东西。您拥有的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);
  })
};