首页 > 编程语言 >node后端--异步处理

node后端--异步处理

时间:2022-10-11 15:22:22浏览次数:74  
标签:node function console log 异步 -- Feo var

异步处理的方法

获取异步方法内的数据

在ES6之前,处理异步通常采用callback方法:

function getData(callback){
    //setTimeout:一个异步方法
    setTimeout(()=>{
        var name = 'Feo';
        callback(name);
    },1000);
}

//外部获取异步方法内数据
getData(function(Data){
    console.log(Data);
})

ES6中对异步的处理主要是使用Promise对象:

var MyPromise = new Promise((resolve, reject)=>{
    setTimeout(()=>{
        var name = 'Feo';
        resolve(name);
    },1000);
})
//外部调用,获取异步函数内部的数据
MyPromise.then((data)=>{
    console.log(data);
})

resolve:成功后执行的回调函数。


reject:失败以后执行的回调函数。

关键词: async && await

async:用于声明一个异步方法


await:用于等待一个异步方法的执行完成

1.小测试:

async function simpleAsyncFunction(){
    return "Hola, Feo!";
}

function testFunction1(){
    console.log(simpleAsyncFunction());
    //结果: Promise{ "Hola, Feo!" }

    console.log(await simpleAsyncFunction());
    //报错,因为await只能用在异步方法内.
}

async function testFunction2(){
    var data = await simpleAsyncFunction();//等待函数执行完再赋值
    console.log(data);
    //结果: Hola, Feo!

    var data1=simpleAsyncFunction();
    console.log(data1);//赋值还没执行完便开始log
    //结果: undefined;
}

2.封装异步方法

如果我们希望一个异步函数内部做完自己的工作后再返回一个结果,比较好的写法是让异步方法返回一个Promise对象,这里以setTimeout方法为例:

async function simpleAsyncFunction1(){
    return new promise((resolve,reject)=>{
        setTimeout(function(){
            var name = "Feo";'
            resolve(name);
        },1000)
    })
}

async function testFunction3(){
    var data= await simpleAsyncFunction1();
    console.log(data);
    //结果: Feo
}

标签:node,function,console,log,异步,--,Feo,var
From: https://www.cnblogs.com/feoandcode/p/16779347.html

相关文章

  • Java数组04(多维数组)
    多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组二维数组语法:inta[][]=newint[2][5]//以上二维数组a可以看成一......
  • mysql插入时无法插入中文
    我这里使用navicate连接的docker里面的mysql表结构:表的初始内容:增加操作:操作后表的内容:可以发现这里中文的插入产生了报错。出现的原因:默认的字符集编码出现......
  • SpringBoot整合ssh
    背景:测试环境连接生产环境的数据库,无法本地调试环境: JDK8Maven:3.6.3Springboot:2.1.4jsch:0.1.55Jsch百度百科介绍:JSch是SSH2的一个纯Java实现。它允许你连......
  • 线程安全
    1.线程(不)安全的类 线程安全线程不安全VectorArrayList、LinkedListPropertiesHashSet、TreeSetStringBufferStringBuilderHashTableHashMap......
  • crictl安装
    crictl介绍crictl是CRI兼容的容器运行时命令行接口,和containerd无关,由Kubernetes提供,可以使用它来检查和调试k8s节点上的容器运行时和应用程序。安装crictl下载地......
  • Add and Mex(时间复杂度,枚举)
    题意给定一个包含\(N\)个元素的序列\(A=(A_1,\dots,A_N)\)。下述操作执行\(M\)次:对于每个\(i,(1\leqi\leqN)\),将\(A_i\)加上\(i\)。然后求序列的mex。题目链接......
  • 【框架】IDEA创建SSM框架流程
    创建模块添加全新模块使用模板创建,选择webapp,之后next框架信息→next→finish框架完整化打开创建好的框架,再选择结构点击OK导入jar包以及对应坐标参考:<?x......
  • nprogress 进度条的使用
    start:进度条开始done:进度条结束进度条样式可以改,当然需要修改人家的样式importaxiosfrom'axios'//引入进度条//start进度条开始done进度条结束importnpro......
  • uniapp禁止表单重复提交
    1.在根目录下新建common文件并创建common.js文件,代码直接复制粘贴即可。//防止处理多次点击functionnoMultipleClicks(methods,info){//methods是需要点击后......
  • workerman/gatewayworker使用protobuffer和json的对比
    作者回答“在websocket上传输json更通用一些,调试也更方便一些。”“快0.00001秒没有什么太大意义。另外最好压测下php的json和protobuffer到底哪个快,php下还真不一定prot......