Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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 可以不使用wait关键字调用异步函数吗?如果我们不等待就打电话怎么办?_Javascript_Reactjs_React Native_Google Cloud Firestore - Fatal编程技术网

Javascript 可以不使用wait关键字调用异步函数吗?如果我们不等待就打电话怎么办?

Javascript 可以不使用wait关键字调用异步函数吗?如果我们不等待就打电话怎么办?,javascript,reactjs,react-native,google-cloud-firestore,Javascript,Reactjs,React Native,Google Cloud Firestore,我想做以下几件事,并记住它实际上对我有用。我的问题是会发生什么,是否可以从非异步componentDidMount()func调用async usrs()func? 如果不可能通过调用this.usrs(usrs)而不是来解释它为什么对我有效,请等待this.usrs(usrs) 函数名之前的异步工作意味着函数总是返回一个承诺,因此是的,这是可能的 wait使JavaScript等待承诺得到解决,当您需要处理该承诺的结果时,它会暂停 为了更好地理解它,我建议查看下一页,如果调用者需要等待函数完成

我想做以下几件事,并记住它实际上对我有用。我的问题是会发生什么,是否可以从非异步
componentDidMount()
func调用
async usrs()
func? 如果不可能通过调用
this.usrs(usrs)
而不是
来解释它为什么对我有效,请等待this.usrs(usrs)


函数名之前的异步工作意味着函数总是返回一个承诺,因此是的,这是可能的

wait使JavaScript等待承诺得到解决,当您需要处理该承诺的结果时,它会暂停


为了更好地理解它,我建议查看下一页,如果调用者需要等待函数完成,例如当它需要函数的结果时,或者当它需要等待函数引起的某些状态/数据更改时,您只需要等待。如果没有这种依赖关系,您可以通过不使用
wait
关键字来“触发并忘记”

正如其他人提到的,您可以使用
。然后也可以使用
,但基本规则是相同的:在函数完成后,当您有特定的事情要做时,您可以这样做。否则可以省略

具体地说,对于“caller”,我只是指调用异步函数的函数。在您的情况下,这将是
componentDidMount
。这些选项非常简单:

  • 保持原样
    usrs()
    将在后台完全运行,
    componentDidMount
    将继续运行,直到结束
  • 使用
    wait
    ,以便
    componentDidMount
    将等待
    usrs()的返回
  • 使用
    usrs()

  • 您可以从任何地方调用异步函数。 异步函数,所以如果您像下面这样调用它,您可以像承诺一样使用它

    异步函数示例(){
    返回10;
    }
    const returnOfAsync=示例()
    console.log(returnOfAsync instanceof Promise)//true
    returnOfAsync.then((theReturn)=>{
    console.log(theReturn)//10
    
    })
    当我们需要调用并等待
    异步
    函数或
    承诺

    在您的情况下,如果在
    componentDidMount
    中没有
    wait
    调用它,您的函数将工作,但
    componentDidMount
    不会等待该函数完全完成。
    另外,如果您不想使用
    wait
    ,也不想在
    componentDidMount
    内部等待,但希望在
    async
    函数完成时收到通知,则可以使用
    。然后改为
    。因为
    async
    函数返回
    Promise

    这是您使用
    安装的
    组件。然后

    请注意,在本例中,
    this.doSomethingElse
    将在
    this.usrs
    完成之前调用,并且只会在
    内部通知您。然后在完成后,
    有关您的
    this.usrs
    结果:

    componentDidMount(){
        this.usrs(usrs).then(() => {
            // Your functions completely finished
        })
        .catch(err => {
            // There was an error
        });
    
        this.doSomethingElse();
    }
    

    实际上,wait只是使用一个承诺(与then()相同),区别在于它在继续执行后续代码之前等待承诺得到解决

    所以

    使用wait调用异步函数,您将在异步函数完成后收到其结果。等待之后的任何代码都将在异步调用返回后执行

    在不等待的情况下调用异步函数,您将得到一个承诺作为返回值。等待后的代码将立即执行


    如果异步调用之后的代码需要从异步调用返回的值,或者依赖于异步调用中发生的某些事情,请使用wait。如果没有,则不要调用。

    您可以调用任何异步函数上的.then方法,而不是等待调用以供参考,我刚刚看到这篇文章,它似乎描述了使用和不使用
    async
    的各种变化:你能给我的示例代码提供更多和简单的细节吗?你能告诉我在我的例子中,调用函数是什么吗?等等。usrs(usrs);完全完成了,对不起。对于“caller”,我只是指调用异步函数的函数。我已经在答案中添加了这三个选项。谢谢你的回答,我只是确认一下,如果我们使用wait so componentDidMount将等待,因此如果必须在调用方之后调用某些函数,也必须等到调用方完成。另外,如果我们使用without Wait,而usrs()没有完成,那么componentDidMount将无法使其保持活动状态并将其隐藏。嗨,Sisa,我想你的回答接近我的问题,你能告诉我是否使用.then()函数,它的工作原理与Wait相同吗?我是说componentDidMount func会等待函数完全完成吗?@Muhammad No,
    componentDidMount
    不会等待,而是会在
    内通知您。然后,
    如果我们不使用wait和componentDidMout,则不会等待函数完成。那么,如果componentDidMout不等待会发生什么?1.我的异步函数将不执行2。我的异步函数将在componentDidmout之后执行function@Muhammad当您不使用
    wait
    时,您的异步函数将在后台运行,
    componentDidMount
    将在不等待异步的情况下继续处理
    componentDidMount(){
        this.usrs(usrs).then(() => {
            // Your functions completely finished
        })
        .catch(err => {
            // There was an error
        });
    
        this.doSomethingElse();
    }