Coursera 笔记

Module 02 · Asynchronous I/O with callback programming异步 I/O 与回调编程

Cheatsheet - Asynchronous I/O with Callback Programming速查表:异步 I/O 与回调编程

Coursera ↗

包/方法 描述 代码示例
Async-await 我们可以在异步函数内部等待 promises。 const axios = require('axios').default;
let url = "some remote url"
async function asyncCall() {
console.log('calling');
const result = await axios.get(url);
console.log(result.data);
}
asyncCall();
回调 回调是作为参数传递的方法。它们在传递它们作为参数的方法内被调用,可以是有条件或无条件的。 我们使用回调与 promise 一起处理响应或错误。 //function(res) 和 function(err) 是匿名回调函数
axios.get(url).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err)
})
Promise 由某些方法返回的对象,表示最终的完成或失败。代码继续运行而不会被阻塞,直到 promise 被满足或抛出异常。 axios.get(url).then(
//执行某些操作
).catch(
//执行某些操作
)
Promise 使用案例 当我们调用的函数处理时间较长,例如远程 URL 访问、I/O 操作文件读取等,使用 promises。 let prompt = require('prompt-sync')();
let fs = require('fs');
const methCall = new Promise((resolve,reject)=>{
let filename = prompt('文件名是什么?');
try {
const data = fs.readFileSync(filename, {encoding:'utf8', flag:'r'});
resolve(data);
} catch(err) {
reject(err)
}
});
console.log(methCall);
methCall.then(
(data) => console.log(data),
(err) => console.log("读取文件时出错")
);
object.on() 定义一个事件处理程序,当事件发生时框架调用它 http.request( options, function(response) {
let buffer = ‘’;
...
response.on('data', function(chunk) {
buffer += chunk;
});
response.on('end', function() {
console.log(buffer);
});
}).end();
回调地狱/厄运金字塔 嵌套的回调一个接一个地堆叠,等待前一个回调。这会创建一个金字塔结构,影响代码的可读性和可维护性。 const makeCake = nextStep => {
buyIngredients(function(shoppingList) {
combineIngredients(bowl, mixer, function(ingredients){
bakeCake(oven, pan, function(batter) {
decorate(icing, function(cake) {
nextStep(cake);
});
});
});
});
};
Axios 请求 axios 包处理 HTTP 请求并返回 promise 对象。 const axios = require('axios').default;
const connectToURL=(url)=>{
const req=axios.get(url);
console.log(req);
req.then(resp=>{
console.log("已满足");
console.log(resp.data);
})
.catch(err=>{
console.log("已拒绝");
});
}
connectToURL('valid-url')
connectToURL('invalid-url')