es7 async和await的问题

qq_35100747 2018-02-26 09:07:12
async function aaa(){
for (let val of [1, 2, 3, 4]) {
await setTimeout(() => console.log(val), 100 * Math.random());
}
};
调用为什么达不到我预期的效果1,2,3,4
有没有大佬解释一下。。。
有哪里不对?

现在我用这两种可以达到
//① 同步第一种
function* aaa(){
for (let val of [1, 2, 3, 4]) {
yield setTimeout(() => console.log(val), 100 * Math.random());
}
}

function bbb(fn){
fn.next();
while(fn.next().value){
this.bbb(fn);
}
}
//② 同步第二种
function ddd(){
var arr=[];
for (let val of [0, 8, 3, 4]) {
arr.push(new Promise((resolve, reject)=>{
//resolve(val)
setTimeout(function(){resolve(val);}, 100 * Math.random());
}));
}
Promise.all(arr).then(function (results) {
console.log(results);
});
...全文
260 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35100747 2018-02-27
  • 打赏
  • 举报
回复
引用 3 楼 wcwtitxu 的回复:
原因就是 原生setTimeout 函数返回值不是Promise ,是一个数字id await 数字,会马上继续执行下文的。达不到中断效果 像楼上那样,包装成 promise
感谢
qq_35100747 2018-02-27
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
或者是

async function aaa(){
	for (let val of [1, 2, 3, 4]) {
		let t = await new Promise((resolve, reject)=>{
			setTimeout(() => resolve(val), 100 * Math.random());
		});
		console.log(t);
	}
}
感谢
wcwtitxu 2018-02-26
  • 打赏
  • 举报
回复
原因就是 原生setTimeout 函数返回值不是Promise ,是一个数字id await 数字,会马上继续执行下文的。达不到中断效果 像楼上那样,包装成 promise
天际的海浪 2018-02-26
  • 打赏
  • 举报
回复
或者是

async function aaa(){
	for (let val of [1, 2, 3, 4]) {
		let t = await new Promise((resolve, reject)=>{
			setTimeout(() => resolve(val), 100 * Math.random());
		});
		console.log(t);
	}
}
天际的海浪 2018-02-26
  • 打赏
  • 举报
回复

async function aaa(){
	for (let val of [1, 2, 3, 4]) {
		await new Promise((resolve, reject)=>{
			setTimeout(() =>{
				console.log(val);
				resolve();
			}, 100 * Math.random());
		});
	}
}

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧