es6中 async await 底层实现原理

Input
async function findPosts() {
  var response = await $.get(‘/posts‘);
  return JSON.parse(response.posts);
}

async function main() {
  console.log(‘starting...‘);

  var posts = await findPosts();

  posts.forEach(function (post) {
    console.log(post);
  });

  console.log(‘ending...‘);
}

main();
Output
function findPosts() {
    var ctx = this, args = arguments;
    return Promise.resolve().then(function () {
        var response;
        return $.get(‘/posts‘).then(function (value) {
            response = value;
            return JSON.parse(response.posts);
        });
    });
}

function main() {
  var ctx = this, args = arguments;
  return Promise.resolve().then(function () {
    console.log(‘starting...‘);

    var posts;
    return findPosts().then(function (value) {
      posts = value;

      posts.forEach(function (post) {
        console.log(post);
      });

      console.log(‘ending...‘);
    });
  });
}

main();

  

我很想 知道他是如何

var posts = await findPosts(); 
后面的代码  也添加到 同一个
 return findPosts().then(  方法中的


参考  https://github.com/jayphelps/sweet-async-await

原文地址:https://www.cnblogs.com/FlowLight/p/11694114.html

时间: 2024-10-02 19:09:20

es6中 async await 底层实现原理的相关文章

ES6中async和await说明和用法

昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简洁,同时async/await 已经被标准化,是时候学习一下了. 先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async 函数 async function timeout() { return 'hello world';}  语法很简单,就是在函数前面加上asyn

es6之 async await 使用小计

var sleep = (time)=>{ return new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve('ok'); reject('err'); },time) }) }; var start = async function () { try { // 在这里使用起来就像同步代码那样直观 console.log('start'); // await必须再 async函数的上下文中 for(var v of [1,2,

C#中 async await的使用

HttpLib使用 https://github.com/j6mes/httplib/ https://www.cnblogs.com/haogj/archive/2013/01/02/2842265.html 参考文档: https://docs.microsoft.com/en-us/dotnet/csharp/async https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index

关于 ASP.NET Web 应用中 async/await 注意问题

System.NullReferenceException: Object reference not set to an instance of an object. at System.Web.ThreadContext.AssociateWithCurrentThread(System.Boolean setImpersonationContext) at offset 20 at System.Web.HttpApplication.OnThreadEnterPrivate(System

js中回调函数,promise 以及 async/await 的对比用法 对比!!!

在编程项目中,我们常需要用到回调的做法来实现部分功能,那么在js中我们有哪些方法来实现回调的? 方法1:回调函数 首先要定义这个函数,然后才能利用回调函数来调用! login: function (fn) { var app = getApp() wx.login({ success: res => { let code = res.code; wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) {

.NET 中的 async/await 异步编程

前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关的知识,并整理成这篇博客,如果在阅读的过程中发现不对的地方,欢迎大家指正. 同步编程与异步编程 通常情况下,我们写的C#代码就是同步的,运行在同一个线程中,从程序的第一行代码到最后一句代码顺序执行.而异步编程的核心是使用多线程,通过让不同的线程执行不同的任务,实现不同代码的并行运行. 前台线程与后台线程 关于多线程,早在.NET2

关于异步执行(Async/await)的理解(转发)

原文地址: http://blog.jobbole.com/85787/ 同步编程与异步编程 通常情况下,我们写的C#代码就是同步的,运行在同一个线程中,从程序的第一行代码到最后一句代码顺序执行.而异步编程的核心是使用多线程,通过让不同的线程执行不同的任务,实现不同代码的并行运行. 前台线程与后台线程 关于多线程,早在.NET2.0时代,基础类库中就提供了Thread实现.默认情况下,实例化一个Thread创建的是前台线程,只要有前台线程在运行,应用程序的进程就一直处于运行状态,以控制台应用程序

进阶篇:以IL为剑,直指async/await

接上篇:30分钟?不需要,轻松读懂IL,这篇主要从IL入手来理解async/await的工作原理. 先简单介绍下async/await,这是.net 4.5引入的语法糖,配合Task使用可以非常优雅的写异步操作代码,它本身并不会去创建一个新线程,线程的工作还是由Task来做,async/await只是让开发人员以直观的方式写异步操作代码,而不像以前那样到处都是callback或事件. async/await IL翻译 先写个简单的例子: 1 using System; 2 using Syste

异步async/await简单应用与探究

异步函数(async/await)简单应用 .NET Framework4.5提供了针对异步函数语法糖,简化了编写异步函数的复杂度. 下面通过一个简单的示例,介绍.NET Framework4.5对异步函数的支持. 示例代码 class Program { static void Main(string[] args) { EasyAsyncAwait(); Console.ReadLine(); } static async void EasyAsyncAwait() { //① Task<s