Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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的onCall函数返回承诺的正确方法?_Javascript_Firebase_Promise_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Javascript 从firebase的onCall函数返回承诺的正确方法?

Javascript 从firebase的onCall函数返回承诺的正确方法?,javascript,firebase,promise,google-cloud-firestore,google-cloud-functions,Javascript,Firebase,Promise,Google Cloud Firestore,Google Cloud Functions,根据我读过的文档,onCall函数应该返回一个承诺。大概是这样的: …onCalldata,上下文=>{ 返回db.collection'game'.docgame\u id.delete; }; ... 这只是接受与delete函数相关联的承诺并将其返回给调用方 但是,如果我想在删除后再执行一个步骤,那么有多个返回路径,我不清楚返回什么: …onCalldata,上下文=>{ 返回db.collection'game'.docgame\u id.delete .那么{ 返回db.collect

根据我读过的文档,onCall函数应该返回一个承诺。大概是这样的:

…onCalldata,上下文=>{ 返回db.collection'game'.docgame\u id.delete; }; ... 这只是接受与delete函数相关联的承诺并将其返回给调用方

但是,如果我想在删除后再执行一个步骤,那么有多个返回路径,我不清楚返回什么:

…onCalldata,上下文=>{ 返回db.collection'game'.docgame\u id.delete .那么{ 返回db.collection'user'.docuser\u id.delete } //.catch{return???} }; ... 我见过类似于我上面键入的代码,但我不清楚这是否正确。 首先,是否说通过返回游戏删除承诺,如果出现错误,将返回给用户,如果成功,则将返回给用户删除承诺?如果存在用户删除异常怎么办


我是否必须创建自己的承诺对象并调用resolve或Rejection If?

这样很好。你几乎不需要创造一个新的承诺。这适用于调用不返回承诺的函数并提供回调的情况


在学习如何应对承诺方面有很多资源。不管代码是否在云函数中运行,JavaScript承诺在任何上下文中都是一样的。一个可调用函数只需要承诺知道工作何时完成,以及返回给调用方的内容。

这样很好。你几乎不需要创造一个新的承诺。这适用于调用不返回承诺的函数并提供回调的情况

在学习如何应对承诺方面有很多资源。不管代码是否在云函数中运行,JavaScript承诺在任何上下文中都是一样的。一个可调用函数只需要这个承诺就可以知道工作何时完成,以及返回给调用方什么

我见过与上面键入的代码类似的代码,但不清楚如何使用 请告诉我这是正确的。首先,是不是说通过返回 游戏删除承诺,如果有错误,将返回到 如果成功,则用户删除承诺将被删除 是否返回给用户?如果存在用户删除异常怎么办

这段代码中的内容是,使用then方法。因为对promise.then的调用会返回一个承诺,所以第一个返回确实会返回一个承诺,因此对于可调用的云函数来说这是可以接受的

但是,要回答问题的结尾,您应该注意:

如果删除游戏时出错,CF将停止,并且不会删除游戏或用户 如果在用户删除过程中出现错误,CF将停止,并且在出现错误之前将成功删除游戏,但不会删除用户。 如果要确保在一个原子操作中同时删除这两个元素,则应使用如下方法:

...onCall((data, context) => {


       let batch = db.batch();

       const gRef = db.collection('game').doc(game_id);
       batch.delete(gRef);

       const uRef = db.collection('user').doc(user_id);
       batch.delete(uRef);

       return batch.commit()

});
我见过与上面键入的代码类似的代码,但不清楚如何使用 请告诉我这是正确的。首先,是不是说通过返回 游戏删除承诺,如果有错误,将返回到 如果成功,则用户删除承诺将被删除 是否返回给用户?如果存在用户删除异常怎么办

这段代码中的内容是,使用then方法。因为对promise.then的调用会返回一个承诺,所以第一个返回确实会返回一个承诺,因此对于可调用的云函数来说这是可以接受的

但是,要回答问题的结尾,您应该注意:

如果删除游戏时出错,CF将停止,并且不会删除游戏或用户 如果在用户删除过程中出现错误,CF将停止,并且在出现错误之前将成功删除游戏,但不会删除用户。 如果要确保在一个原子操作中同时删除这两个元素,则应使用如下方法:

...onCall((data, context) => {


       let batch = db.batch();

       const gRef = db.collection('game').doc(game_id);
       batch.delete(gRef);

       const uRef = db.collection('user').doc(user_id);
       batch.delete(uRef);

       return batch.commit()

});