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();
}