Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果Firebase云函数有两个或多个方法返回承诺,那么该返回什么?_Javascript_Node.js_Firebase_Google Cloud Functions - Fatal编程技术网

Javascript 如果Firebase云函数有两个或多个方法返回承诺,那么该返回什么?

Javascript 如果Firebase云函数有两个或多个方法返回承诺,那么该返回什么?,javascript,node.js,firebase,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Functions,我有一个云函数,它监听Firebase数据库中的更改,并用一个返回promise的函数进行响应 exports.clean_up_anonymous_users = functions.database.ref('path/to/ref') .onWrite(event => { // Make Sure it's not a delete event if (!event.data.val()) { return 0; } cons

我有一个云函数,它监听
Firebase数据库中的更改
,并用一个返回
promise
的函数进行响应

exports.clean_up_anonymous_users =
  functions.database.ref('path/to/ref')
  .onWrite(event => {

    // Make Sure it's not a delete event
    if (!event.data.val()) {
      return 0;
    }

    const cleanUp = event.data.val();

    // Normal Boolean check of my value
    if (cleanUp === true) {

      // Deletes Anonymous Users (returns a promise)
      listAllUsers();

      // Removes the value from the Database (returns a promise)
      return removeFromQueue("path/to/ref");

    }

    // If cleanUp === false
    return 0;
  });

// ===============================================
// I think that's enough but if you wish, read on!
// ===============================================

function listAllUsers(nextPageToken) {
  // List batch of users, 1000 at a time.
  admin.auth().listUsers(1000, nextPageToken)
    .then(function(listUsersResult) {
      listUsersResult.users.forEach(function(userRecord) {
        var userInfo = userRecord.providerData;
        if (userInfo.length === 0) {
          var uid = userRecord.uid;
          admin.auth().deleteUser(uid)
            .then(function() {
              console.log("Successfully deleted user:", uid);
            })
            .catch(function(error) {
              console.log("Error deleting user:", error);
            });
        }
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch(function(error) {
      console.log("Error listing users:", error);
    });
}

function removeFromQueue(path) {
  admin.database().ref(path).remove()
  .then(function() {
    console.log("Remove succeeded.")
  })
  .catch(function(error) {
    console.log("Remove failed: " + error.message)
  });
}
此代码按预期工作,但在日志窗口中显示错误:

错误:函数返回未定义的预期承诺或值


如何消除该错误?

最后定义的两个函数确实返回
未定义的
,因为它们没有返回任何内容。这将在Ruby中起作用,函数体中最后解释的行是
return
ed

因此,在这些函数中的主体开始之前添加
return
,因为在它们内部,您正在使用承诺链,该承诺链将在它们的执行完成时返回承诺

因此,在您的代码中会出现以下内容:

return admin.auth()...


尝试在listAllUsers函数的正文中的第一行之前添加return 1+谢谢,就是这样
return admin.database()...