Promise对象与async函数
程序员文章站
2022-07-13 09:31:15
...
环境搭建
npm init -y
npm install --save express
- 服务器端
//server.js
const express = require("express");
const server = express();
server.use(express.static(__dirname));
server.get("/data",function(req,res){
const user = {
name:"左一",
address:"上海 "
}
res.json(user);
});
server.get("/name",function(req,res){
const name = "左一";
res.send(name);
})
server.listen("3030",function(){
console.log("listening on *:3030");
})
- 浏览器端
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="./index.js"></script>
</body>
</html>
//index.js
function getDataFromServer(){
return fetch("/data").then(function(response){
return response.json();
}).then(function(user){
console.log(user);
return user;
})
}
function getName(){
return fetch("/name").then(function(response){
return response.text();
}).then(function(name){
console.log(name);
return name;
})
}
回调函数作参数
//index.js
function getDataFromServer(callback){
fetch("/data").then(function(response){
return response.json();
}).then(function(user){
callback(user);
})
}
function preprocessBeforeRendering(user,callback){
const str = `${user.name}他现在在${user.address}`;
callback(str);
}
function render(htmlString){
document.body.innerHTML = htmlString;
}
getDataFromServer(function(user){
preprocessBeforeRendering(user,function(htmlString){
render(htmlString);
})
})
Promise
new Promise().then()
//index.js
function getDataFromServer(){
return fetch("/data").then(function(response){
return response.json();
}).then(function(user){
return user;
})
}
function preprocessBeforeRendering(user){
return `${user.name}他现在在${user.address}`;
}
function render(htmlString){
document.body.innerHTML = htmlString;
}
getDataFromServer()
.then(function(user){
return preprocessBeforeRendering(user);
}).then(function(htmlString){
render(htmlString);
})
-
fetch
返回一个Promise对象 -
then(onFulflled,onRejected)
接受两个参数,返回一个Promise对象-
onFulfilled
异步操作成功时调用的回调函数
回调函数的参数是异步操作的结果 -
onRejected
异步操作失败时调用的回调函数
回调函数的参数是异步操作的结果
-
Promise.resolve().then()
//index.js
function getDataFromServer(){
return fetch("/data").then(function(response){
return response.json();
}).then(function(user){
return user;
})
}
function preprocessBeforeRendering(user){
return `${user.name}他现在在${user.address}`;
}
function render(htmlString){
document.body.innerHTML = htmlString;
}
Promise.resolve()
.then(getDataFromServer)
.then(preprocessBeforeRendering)
.then(render);
// [getDataFromServer,preprocessBeforeRendering,render].reduce((p,fn)=>p.then(fn),Promise.resolve());
// const applyAsync = (p,fn) => p.then(fn);
// const composeAsync = (...funcs) => funcs.reduce(applyAsync,Promise.resolve());
// composeAsync(getDataFromServer,preprocessBeforeRendering,render);
Promise.resolve()
,手动创建一个已经resolve的Promise对象。
async…await
//index.js
function getDataFromServer(){
return fetch("/data").then(function(response){
return response.json();
}).then(function(user){
return user;
})
}
function preprocessBeforeRendering(user){
return `${user.name}他现在在${user.address}`;
}
function render(htmlString){
document.body.innerHTML = htmlString;
}
async function init(){
const user = await getDataFromServer();
const htmlString = preprocessBeforeRendering(user);
render(htmlString);
}
init();
-
async function
返回一个Promise对象 -
await
该关键词只在async function
内有效
async...await
允许我们以类似同步方式书写异步代码。
上一篇: 自定义相机中如何实现二维码扫描功能
下一篇: C3P0
推荐阅读
-
php中数字、字符与对象判断函数用法实例
-
PHP var_dump遍历对象属性的函数与应用代码
-
JS中的函数与对象的创建方式
-
前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数
-
net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等
-
ES6 Promise对象概念与用法分析
-
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
-
18.C++-[ ]操作符使用 、函数对象与普通函数区别(详解)
-
PHP 函数库精讲之类与对象
-
javascript设计模式之对象工厂函数与构造函数详解