Javascript异步编程

本文介绍Javascript目前最主流的2种异步编程方式。

开发工具webstorm, 服务端运行环境nodejs 6.9.2, 前端运行环境chome 56.

开发语言ES6, 前端如果浏览器不支持可以借助于babel进行代码转换。


首先准备一个简单的httpserver

let http = require('http')

let server = http.createServer(function(request, response){
    if (request.url == "/user"){
        response.writeHead(200, {'Content-Type':'application/json'});
        response.writeHead(200, {'Access-Control-Allow-Origin':'*'});
        let data = {"name":"chenhf"};
        response.end(JSON.stringify(data))
    }    else{
        response.writeHead(200, {'Content-Type':'text/plain'});
        response.writeHead(200, {'Access-Control-Allow-Origin':'*'});
        response.end("hello the world");
    }
})

server.listen(8888);
console.log("http server starting...");

代码准备好后,用nodejs运行或直接在webstorm运行就可以了。



第一种方式:Promise

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="node_modules/jquery/dist/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<script>
    // 没有使用fetch api

let getUser = new Promise(function(resolve, reject){
    $.ajax({
        type:"get",
        url:"http://localhost:8888/user",
        success:function(result){
            console.log("ajax return:" + result);
            resolve(result);
        },
        error:function(jqXHR, textStatus, errorThrown){
            reject(textStatus);
        }
    })
})

    getUser.then(function(resultJson){
        console.log("resolve:" + resultJson);
        document.body.innerHTML = resultJson;
    }).catch(function(errMsg){
        console.log("reject:" + errMsg);
        document.body.innerHTML = errMsg;
    })

</script>
</body>
</html>
运行效果如下图


第二种方式:async/await

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="node_modules/jquery/dist/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<script>
    // 没有使用fetch api

let fetch = function(url){
    return new Promise(function(resolve, reject){
        $.ajax({
            type:"get",
            url:url,
            success:function(result){
                console.log("ajax return:" + result);
                resolve(result);
            },
            error:function(jqXHR, textStatus, errorThrown){
                reject(textStatus);
            }
        })
    })
}

    async function getUser(){
        await fetch("http://localhost:8888/user").then(function(result){
            document.body.innerHTML = result;
        }).catch(function(err){
            console.log(err);
        });
    }

    getUser();

</script>
</body>
</html>
运行效果如图



--结束--


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值