Nodejs新特性async和await的使用详解

目录
  • 1.Es6常见语法的使用
  • 2.Async、Await和Promise

1.Es6常见语法的使用

1.letconst

let:是一个块作用域

if (true) {
    let a = 123;
}
console.log(a);  // a is not defined

const:定义常量

const PI = 3.1415926;
PI = 3.15  // Assignment to constant variable.
console.log(PI)

var:全局变量

2.箭头函数

setTimeout(() => {
    console.log("我被执行了")
}, 1000)

3.对象、属性和方法的简写

const name = "王五"
var person = {
    // "name": name
    // name: name
    name
}
console.log(person.name)
var name = "候七"
var app = {
    name,
    // run: function(){
    //     console.log(`${this.name}在跑步`)
    // },
    run(){
        console.log(`${name}在跑步`)
    }
}

app.run()

4.模板字符串

const name = "张三"
const age = 27
console.log(`${name}的年龄是${age}`)

5.Promise

主要用来处理异步,比如下面的示例

function getData(){
	// 异步
    setTimeout(function(){
        let name = "孙悟空";
        return name
    }, 1000)
}

console.log(getData())  // undefined

如果要在外面获取异步对象执行的结果,可以使用callback回调方式

function getData(callback){
    setTimeout(function(){
        let name = "孙悟空";
        callback(name);
    }, 1000)
}

getData(function(result){
    console.log(result)  // 孙悟空
})

Es6中新特性Promise方法

var p = new Promise(function(resolve, reject){
    setTimeout(function(){
        let name = "猪八戒";
        resolve(name)
    }, 1000);
})

p.then(function(data){
    console.log(data);
})

2.Async、Await和Promise

1.定义:

async是异步的简写,而await可以认为是async wait的简写,所以应该很好理解:async用于申明一个异步的fuction,而await用于等待一个异步方法执行完成。

2.简单示例

1.async方法通常应该返回一个Promise对象

async function test(){
	// 通常异步方法中返回一个Promise对象,如果给定的是字符串,内部也会将其转换为Promise对象
	return "hello nodejs";
}

console.log(test())

// Promise {[[PromiseState]]: 'fulfilled', [[PromiseResult]]: 'hello nodejs', Symbol(async_id_symbol): 5, Symbol(trigger_async_id_symbol): 1}
async function test(){
	return new Promise(function(resolve, reject){
        resolve("hello nodejs")
    })
}

console.log(test())

2.await方法必须在async方法中使用

async function test(){
	return new Promise(function(resolve, reject){
        resolve("hello nodejs")
    })
}

// console.log(await test())  错误写法

async function main(){
    let result = await test();  // await必须用在async方法中
    console.log(result)
}

main();

到此这篇关于Nodejs新特性async和await的使用的文章就介绍到这了,更多相关Nodejs async和await使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • NodeJs通过async/await处理异步的方法

    场景 远古时代 我们在编写express后台,经常要有许多异步IO的处理.在远古时代,我们都是用chunk函数处理,也就是我们最熟悉的那种默认第一个参数是error的函数.我们来模拟一个Mongo数据库的操作,感受一下. mongoDb.open(function(err, db){ if(!err){ db.collection("users", function(err, collection){ if(!err){ let person = {name: "yika&q

  • async/await与promise(nodejs中的异步操作问题)

    举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文章作者信息.获取全部数据之后渲染文章详情页.数据库操作都是异步的,最直接想到的办法就是一层一层的回调函数,问题出来了:十分不雅观,要是层再多一点还会有更多麻烦.怎么解决?业内为了处理异步操作问题也是拼了,什么async,q,bluebird,co,处理方式不同,各有千秋,感兴趣可以了解一下,但是惊喜的发现nodejs 7.6已经默认支持ES7中的 async/awa

  • Nodejs新特性async和await的使用详解

    目录 1.Es6常见语法的使用 2.Async.Await和Promise 1.Es6常见语法的使用 1.let.const let:是一个块作用域 if (true) { let a = 123; } console.log(a); // a is not defined const:定义常量 const PI = 3.1415926; PI = 3.15 // Assignment to constant variable. console.log(PI) var:全局变量 2.箭头函数 s

  • C++11新特性之变长参数模板详解

    目录 C++11 变长参数模板 变长函数参数包 如何解参数包 sizeof()获得函数参数个数 递归模板函数 变参模板展开 结论 C++11 变长参数模板 在C++11之前,无论是类模板 还是函数模板,都只能按其指定的样子,接受一组固定数量的模板参数: 这已经大大提升了代码的复用! 在C++11之后,加入了新的表示方 法,允许任意个数.任意类别的模板参数,同时也不需要在定义时将参数的个数固定.更加像"黑魔法"了. template<typename... Ts> class

  • 浅谈C#中的Async和Await的用法详解

    众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译的,只不过加上了自己的理解进行了相关知识点的补充,如果你认为自己的英文水平还不错,大可直接跳转到文章末尾查看原文链接进行阅读. 写在前面 自从C# 5.0时代引入async和await关键字后,异步编程就变得流行起来.尤其在现在的.NET Core时代,如果你的代码中没有出现async或者await

  • ES6新特性三: Generator(生成器)函数详解

    本文实例讲述了ES6新特性三: Generator(生成器)函数.分享给大家供大家参考,具体如下: 1. 简介 ① 理解:可以把它理解成一个函数的内部状态的遍历器,每调用一次,函数的内部状态发生一次改变. ② 写法: function* f() {} ③ 作用:就是可以完全控制函数的内部状态的变化,依次遍历这些状态. ④ 运行过程:当调用Generator函数的时候,该函数并不执行,而是返回一个遍历器(可以理解成暂停执行).通过调用next()开始执行,遇到yield停止执行,返回一个value

  • ES6新特性七:数组的扩充详解

    本文实例讲述了ES6新特性之数组的扩充.分享给大家供大家参考,具体如下: 1. Array.from() 1) Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map,他们都部署了iterator接口,字符串也是). let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; // ES5的写法 var arr

  • ES6新特性六:promise对象实例详解

    本文实例讲述了ES6新特性之promise对象.分享给大家供大家参考,具体如下: 1. promise 介绍 它是一个对象,也就是说与其他JavaScript对象的用法,没有什么两样:其次,它起到代理作用(proxy),充当异步操作与回调函数之间的中介.它使得异步操作具备同步操作的接口,使得程序具备正常的同步运行的流程,回调函数不必再一层层嵌套. 它的思想是,每一个异步任务立刻返回一个Promise对象,由于是立刻返回,所以可以采用同步操作的流程.这个Promises对象有一个then方法,允许

  • ES6新特性之函数的扩展实例详解

    本文实例讲述了ES6新特性之函数的扩展.分享给大家供大家参考,具体如下: 一.函数参数默认值 1. ES6允许为函数的参数设置默认值,即直接写在参数定义的后面. function log(x, y = 'World') { console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // Hello 这种写法有两个好处:首先,阅读代码的人,可以立刻意识

  • 关于C# 4.0新特性“缺省参数”的实现详解

    前言 C#4.0关于缺省参数的新特性,相信大家都不会陌生.所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法的时候如果采用该默认值,你就无须指定该参数.和很多语言层面特性(语法糖)的实现一样,缺省参数也是编译器为我们玩的一个小花招.缺省参数最终体现为两个特殊的自定义特性OptionalAttribute和DefaultParameterValueAttribute . 目录 一.缺省参数的用法 二.实现缺省参数的两个特性:OptionalAttribute和D

  • java8新特性之接口默认方法示例详解

    前言 JAVA8 已经发布很久,而且毫无疑问,java8 是自 java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和 JVM 等诸多方面的新特性.Java8 新特性列表如下: 接口默认方法 函数式接口 Lambda 表达式 方法引用 Stream Optional 类 Date API Base64 重复注解与类型注解 接口默认方法 1.什么是接口默认方法 从 Java8 开始,程序允许在接口中包含带有具体实现的方法,使用 default 修饰,这类方法就是默认方法.

  • JDK1.8新特性之方法引用 ::和Optional详解

    一:简介 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方法引用,通过实例对象::实例方法,如 str::substring 构造方法引用,通过类名::new, 如 User::new 二:方法引用 public final class Integer { public static int parseInt(String s) throws NumberForm

随机推荐