async 函数会返回一个 Promise 对象,如果在函数中 return
一个直接量,async 会把这个直接量通过 Promise.resolve()
封装成 Promise 对象。
async function fn () {}
console.log(fn) // [AsyncFunction: fn]
console.log(fn()) // Promise {<fulfilled>: undefined}
可以看出,async
函数执行完会自动返回一个状态为fulfilled
的Promise
,也就是成功状态,但是值却是undefined,那要怎么才能使值不是undefined呢?很简单,函数有return返回值就行了
async function fn (num) {
return num
}
console.log(fn) // [AsyncFunction: fn]
console.log(fn(10)) // Promise {<fulfilled>: 10}
fn(10).then(res => console.log(res)) // 10
可以看出,此时就有值了,并且还能使用then方法进行输出
await 是在等待一个 async 函数完成。不过按语法说明,await 等待的是一个表达式,这个表达式的计算结果是 Promise 对象或者其它值
async function read(){
let value1 = await readFile('./name.txt','utf-8');
let value2 = await readFile(value1,'utf-8');
let value3 = await readFile(value2,'utf-8');
console.log('hello world');
return value3;
}
let promise = read()
promise.then((val) => {
console.log(val);
})
const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);
async function read() {
try {
let value = await readFile('./first.txt','utf-8');
console.log("await 拿到的value", value);
return 'async read 返回值'; // 走 resolve
} catch (err) {
console.log('try-catch捕获的错误', err);
return Promise.reject(err); // 走 reject
}
console.log('try-catch后边代码');
// try、catch中如果都return,上面一行代码就不执行了
}
let promise = read()
promise.then(val => {
console.log("then success:", val);
}, err => {
console.log('then fail', err)
})
console.log(1111)