返回信息流一个简单的async await的例子
```javascript
const f = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(123);
}, 2000);
});
};
const testAsync = async () => {
const t = await f();
console.log(t);
};
testAsync();
//2秒后 打印出123
/*--------------------------------------*/
//另一种写法
const f = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(123);
}, 2000);
});
};
const testAsync = async () => {
const t = await f();
return t
};
const a = testAsync();
console.log(a)
//瞬间打印出 Promise {(pending)}
//2s后程序调用结束
```
我想问第二种写法下,testAsync()函数中,不是应该等待异步返回结果f()完成后,才赋值并返回的吗,
为什么打印出来的结果不同呢?假设我想要取得f()的结果后再做其他的处理,只能写到async函数里面吗?
这是一条镜像帖。来源:北邮人论坛 / java-script / #1434同步于 2017/2/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖
为什么这两种写法的返回结果不同呢?
matsunatsuri
2017/2/27镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
看下es6关于async函数的描述,async函数的返回值是Promise,第二种写法应该是a.then(value=>console.log(value))
当async中的return返回的不是Promise对象,会转换成Promise对象,其实t就是await f()返回的123,不过又被async变成Promise了,话说你这Es6的异步理解的不多,用起来也不标准啊
async function f() {
return 'hello world';
}
f().then(v => console.log(v))
// "hello world"
试试吧
不好意思没有看明白
上面的例子是看一个文章中介绍es7 async await用法的
您举的例子也没有看明白。。
```javascript
async function f() {
setTimeout(()=>{
return 'hello world';
},2000)
}
f().then(v => console.log(v))
```
是这样的意思吗?2s后返回hello world后打印?
好像并不行
【 在 logsin 的大作中提到: 】
: async await不代表你可以用同步代码的思维去构建异步代码,该有的异步代码关键字还是不可以少的,比如then
我觉得上面的例子并没有什么问题啊 async 表示函数里有异步操作
在例子的async 函数 testAsync()里面 await函数f()异步返回的结果 之后打印
这个有什么不标准的地方吗?
【 在 logsin 的大作中提到: 】
: async await不代表你可以用同步代码的思维去构建异步代码,该有的异步代码关键字还是不可以少的,比如then
感谢解答 原问题已经想明白了
确实对异步的流程不太熟悉 流程中有一个结果需要await 那么之后的流程全都要用async函数封装啊。。或者像您说的用then来执行之后的步骤。
【 在 logsin 的大作中提到: 】
: 看下es6关于async函数的描述,async函数的返回值是Promise,第二种写法应该是a.then(value=>console.log(value))