美文网首页
理解 Javascript 的 异步

理解 Javascript 的 异步

作者: SingleDiego | 来源:发表于2019-08-22 22:47 被阅读0次

先看下面一个例子:

const delay = () => {
  setTimeout(() => {
    console.log('hello');
  }, 100);
};

const atOnce = () => {
  console.log('world');
};

const test = () => {
  delay();
  atOnce();
};

test();


// 输出结果
// world
// hello

delay 函数设定 100 毫秒后输出字符串 hello。在 test 函数中 delay()atOnce 上方。

但 Javascript 执行时代码并非线性地运行,并不会等待 delay() 执行完毕再去执行 atOnce。所以我们看到先输出 world 再输出 hello




如果需要等待 delay 函数执行完毕后再执行 atOnce 函数,下面演示几种方法。

使用 Promise 和 then

const delay = () => {
  let promise = new Promise((resolve, reject) => {
    setTimeout(resolve('hello'), 100);
  });
  return promise;
};

const atOnce = () => {
  console.log('world');
};

delay()
.then((value) => {
  console.log(value)
})
.then(atOnce)

// 输出
// hello
// world




使用 Generator

const delay = () => {
  let promise = new Promise((resolve, reject) => {
    setTimeout(resolve('hello'), 100);
  });
  return promise;
};

const atOnce = () => {
  console.log('world');
};

function* gen(){
  yield delay();
  atOnce();
};

var g = gen();
var result = g.next();

result.value
.then((data) => {
  console.log(data)
})
.then(() => {g.next()});

// 输出
// hello
// world




使用 async 和 await

const delay = async () => {
  let promise = new Promise((resolve, reject) => {
    setTimeout(resolve('hello'), 100);
  });
  return promise;
};

const atOnce = () => {
  console.log('world');
};

const test = async () => {
  const v = await delay();
  console.log(v);
  atOnce();
}

test()

// 输出
// hello
// world

相关文章

  • javascript异步理解

    javascript是单线程编程,意思就是javascript引擎一次只能执行一个语句。这样在出现长时间的请求的话...

  • 理解 Javascript 的 异步

    先看下面一个例子: delay 函数设定 100 毫秒后输出字符串 hello。在 test 函数中 delay(...

  • 理解Javascript的异步

    前言 本文2925字,阅读大约需要10分钟。 总括: 本文梳理了异步代码和同步代码执行的区别,Javascrip...

  • ajax

    ajax async javascript and xml在ajax的异步不是我们理解的同步异步编程,而是泛指局部...

  • 第三十四节: JavaScript Ajax与跨域

    1.理解Ajax 1.1. 什么是ajax Asynchronous JavaScript and xml (异步...

  • JavaScript异步编程好文摘要

    JavaScript之异步编程简述JavaScript异步编程

  • AJAX

    AJAX:Asynchronous javascript And XML 异步的javascript和xml 异步...

  • ES6文章合集

    一、深入理解ES6异步编程 JavaScript 的单线程,如果没有异步编程的话将会苦不堪言。ES6 之前,异步编...

  • JS异步机制原理及注意事项

    推荐两篇优秀文章: 首先阅读 Javascript 异步实现机制 然后阅读 js-关于异步原理的理解和总结 这篇文...

  • Javascript的异步编程的理解

    在单线程的javascript编程来说,所有的任务分为两种,一种是同步任务(synchronous), 另一种是异...

网友评论

      本文标题:理解 Javascript 的 异步

      本文链接:https://www.haomeiwen.com/subject/ymkasctx.html