zoukankan      html  css  js  c++  java
  • es6-Async函数

    定义

    async function 用来定义一个返回AsyncFunction对象的异步函数。异步函数是
    指通过实践循环异步执行的函数,他会通过一个隐式的Promise返回其结果

    var asyFn = async function(){
    }
    console.log(asyFn())//Promise {<resolved>: undefined}
    

    语法

    async function name([param[,param[,....param]]]){statements}

    参数

    name——函数名称
    param——要传递给函数的参数
    statements——函数体语句

    var asyncFn1 = async function(){
    	console.log("1111")
    	return "dddd"
    //			return new Error("err")
    }
    asyncFn1().then(function(res){
    	console.log(res)
    })
    

    返回值

    返回Promise对象会运行执行(resolve)异步函数的返回结果,或者运行拒绝(reject)——如果异步函数抛出异常的话

    描述

    异步函数可以包含await指令,该指令会暂停异步函数的执行,并等待Promise执行,然后继续执行异步函数,并返回结果,记住await关键字只在异步函数内有效。如果你在异步函数外使用它,
    会抛出语法错误。注意,当异步函数暂停时,它调用的函数会继续执行(收到异步函数返回的隐式Promise)

    async/await的目的是简化使用多个promise时的同步行为,并对一组Promises执行某些操作。正如Promises类似于结构化回调,async/await更像结合了generators和promise

    var resolveAfter2Seconds = function(){
    	console.log("starting slow promise");
    	return new Promise(resolve => {
    		setTimeout(function(){
    			resolve("slow");
    			console.log("slow promise is done")
    		},2000)
    	})
    }
    var resolveAfter1Second =function(){
    	console.log("starting fast promise");
    	return new Promise(resolve => {
    		setTimeout(function(){
    			resolve("false");
    			console.log("fast promise is done")
    		},1000)
    	})
    }
    var sequentialStart = async function(){
    	console.log("===SEQUENTIAL START===");
    	const slow = await resolveAfter2Seconds();
    	const fast = await resolveAfter1Second();
    	console.log(fast)
    }
    var concurrentStart = async function(){
    	console.log("===CONCURRENT START with await===");
    	const slow = resolveAfter1Second();
    	const fast = resolveAfter1Second();
    	console.log(await slow);
    	console.log(await fast)
    }
    
    var concurrentPromise = function(){
    	console.log("===CONCURRENT START WITH Promise.all===")
    	return Promise.all([resolveAfter2Seconds(),resolveAfter1Second()]).then((message) => {
    		console.log(message[0])
    		console.log(message[1])
    	})
    }
    var parallel = async function(){
    	await Promise.all([
    		(async() => console.log(await resolveAfter2Seconds()))(),
    		(async() => console.log(await resolveAfter1Second()))()
    	])
    }
    
    var parallelPromise = function(){
    	console.log("===PARALLEL with Promise.then===");
    	resolveAfter2Seconds().then((message) => console.log(message));
    	resolveAfter1Second().then((message) => console.log(message))
    }
    
    sequentialStart();
    setTimeout(concurrentStart,4000)
    setTimeout(concurrentPromise,7000)
    setTimeout(parallel,1000)
    setTimeout(parallelPromise,13000)
    
  • 相关阅读:
    组件库设计
    kill 3000
    nextjs服务端渲染原理
    Web交互增强
    webpack4.0打包的时候一些技巧
    把网站部署到阿里云上的步骤
    typescript使用小结
    webpack 4.0尝鲜
    基于Quick-cocos2d-x的资源更新方案 二
    Android APK是否需要预解压
  • 原文地址:https://www.cnblogs.com/dehenliu/p/12523513.html
Copyright © 2011-2022 走看看