Javascript 如何使普通java脚本函数异步?

Javascript 如何使普通java脚本函数异步?,javascript,asynchronous,Javascript,Asynchronous,首先,下面的代码从call()函数中打印返回的值,尽管执行该函数需要一些时间,然后打印下一行 但是我想使它具有异步行为,以便它首先输出最后一行(执行时间比前一行(高级执行时间)短)。我该怎么做 函数调用(){ 设计数器=0; for(设i=0;i0.5){ 决定(“成功”); }否则{ 拒绝(“失败”); } }); //async关键字创建一个返回承诺的异步函数 异步函数ansyncExample(){ 试一试{ const-outcome=等待随机PROM; 控制台日志(结果); }捕获(

首先,下面的代码从
call()
函数中打印返回的值,尽管执行该函数需要一些时间,然后打印下一行

但是我想使它具有异步行为,以便它首先输出最后一行(执行时间比前一行(高级执行时间)短)。我该怎么做

函数调用(){
设计数器=0;
for(设i=0;i<40000;i++){
对于(设j=0;j<50000;j++){
计数器++;
}
}
返回计数器;
}
log(call());

log('loading…')在函数之前添加关键字
async
,使其成为

async function call(){...}
我希望它将有助于

异步功能 异步函数建立在承诺之上。它们允许更方便地使用承诺。异步函数具有以下属性:

  • async
    在函数声明/表达式将函数转换为异步函数之前。顾名思义,异步函数是异步执行的
  • 异步函数总是返回承诺。它将所有返回值包装在
    Promise.resolve(returnval)
    中。但是,当异步函数中抛出未捕获错误时,它会将返回值包装在
    Promise.catch(returnval)
  • 在异步函数中,您可以使用
    wait
    关键字,该关键字可以在任何承诺之前使用
    wait
    使JS代码停止执行,直到承诺得到解决。i、 e.在异步函数内的任何进一步代码执行之前,必须履行或拒绝承诺
  • wait
    返回已履行承诺的值,或者在承诺被拒绝的情况下抛出错误。我们可以使用常规的try-catch来捕获错误
让我们用一些例子来说明这一点:

例1:
const randomProm=新承诺((解决、拒绝)=>{
if(Math.random()>0.5){
决定(“成功”);
}否则{
拒绝(“失败”);
}
});
//async关键字创建一个返回承诺的异步函数
异步函数ansyncExample(){
试一试{
const-outcome=等待随机PROM;
控制台日志(结果);
}捕获(错误){
console.log(错误);
}
//这个返回值包含在一个承诺中
返回'AsyncReturnVal';
}
//ansyncExample()返回一个承诺,我们可以调用它对应的then方法
ansyncExample()。然后((值)=>{
console.log(值);
});

log('我在异步代码之前执行,因为这是同步的')请显示一个单独的示例是不够的。无论顺序如何,在
call
完成运行之前,两者都不会进行日志记录。为什么要这样做?如果只是为了获得不同的输出顺序,那么交换行就容易多了。你还希望用它实现什么?重复的,这是否回答了你的问题?“顾名思义,异步函数是异步执行的。”这不是真的
async
意味着两件事:函数返回一个承诺,您可以在函数内部使用
wait
来暂停执行<代码>异步
本身并不意味着函数是异步执行的。只需运行
(异步函数(){console.log('inside');返回42;}());console.log('after')。或者换言之:直到第一个
wait
表达式同步执行之前的所有操作。