Javascript | 分别用async await异步方法和Promise来实现一个简易的求职程序

JavaScript Promise
new Promise(function (resolve, reject) {
// 要做的事情...
});
new Promise(function (resolve, reject) {
console.log(1111);
resolve(2222);
}).then(function (value) {
console.log(value);
return 3333;
}).then(function (value) {
console.log(value);
throw "An error";
}).catch(function (err) {
console.log(err);
});
1111
2222
3333
An error
JavaScript async/await异步方法
- async 是“异步”的简写,async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成,await 只能出现在 async 函数中。
- async 表示这是一个async函数, await只能用在async函数里面,不能单独使用
- async 返回的是一个Promise对象,await就是等待这个promise的返回结果后,再继续执行
- await 等待的是一个Promise对象,后面必须跟一个Promise对象,但是不必写then(),直接就可以得到返回值
求职面试
//面试
function interview(round) {
return new Promise((resole, reject) => {
setTimeout(() => {
var score = Math.random();
if (score > 0.6) {
resole(score);
} else {
var err = new Error(`分数:${score}`);
err.round = round;
reject(err)
}
}, 1000);
});
};
通过异步方法来实现求职过程:
//异步方法求职
async function seekJobs() {
console.log('seekJobs => start');
console.time('seekJobs');
try {
console.log('第 1 轮面试得分:', await interview(1));
console.log('第 2 轮面试得分:', await interview(2));
console.log('第 3 轮面试得分:', await interview(3));
console.log('yeah!');
} catch (error) {
console.error('第 ' + error.round + ' 轮面试没通过:', error);
}
console.log('seekJobs => end.');
console.timeEnd('seekJobs');
return '求职已经结束。';
};
通过async声明该方法为异步方法,每一轮面试用await等待返回面试结果,通过可进入下一轮面试,不通过则记录是第几轮面试和得分,最后方法返回信息“求职已经结束。”
通过Promise方式来实现求职过程:
//promise的方式求职
function seekJobs_P() {
console.log('seekJobs => start');
console.time('seekJobs');
interview(1)
.then((score) => {
console.log('第 1 轮面试得分:', score);
return interview(2);
})
.then((score) => {
console.log('第 2 轮面试得分:', score);
return interview(3);
})
.then((score) => {
console.log('第 3 轮面试得分:', score);
console.log('yeah!');
})
.catch((error) => {
console.error('第 ' + error.round + ' 轮面试没通过:', error);
});
console.log('seekJobs => end.');
console.timeEnd('seekJobs');
return '求职已经结束。';
};
每一轮面试的通过都会进入到then,打印分数并调用下一轮面试,直到所有面试都通过,中间过程中有一轮面试没通过则进入到catch,最后同样返回信息“求职已经结束“
最后写主程序main方法
/**
* 主线程
*/
(function main() {
console.log('main.start======================================');
console.time('main'); //调用求职的异步方法,遇到await不等待,直接返回到mian方法继续执行,main执行完才输出求职返回结果
// seekJobs().then((res) => {
// console.log('求职返回:', res);
// }); //调用promise的方式求职,遇到then继续执行并返回"求职已经结束。",回到main方法输出求职返回结果,最后再输出每一次面试的分数
var res = seekJobs_P();
console.log('求职返回:', res); console.log('main.end======================================');
console.timeEnd('main');
})();
Javascript | 分别用async await异步方法和Promise来实现一个简易的求职程序的更多相关文章
- Javascript中的async await
async / await是Javascript是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度 ...
- 【转】C# Async/Await 异步编程中的最佳做法
Async/Await 异步编程中的最佳做法 Stephen Cleary 近日来,涌现了许多关于 Microsoft .NET Framework 4.5 中新增了对 async 和 await 支 ...
- 将 async/await 异步代码转换为安全的不会死锁的同步代码
在 async/await 异步模型(即 TAP Task-based Asynchronous Pattern)出现以前,有大量的同步代码存在于代码库中,以至于这些代码全部迁移到 async/awa ...
- async/await异步处理demo
async/await异步处理demo 下载地址: async/await异步处理demo
- 深入理解协程(四):async/await异步爬虫实战
本文目录: 同步方式爬取博客标题 async/await异步爬取博客标题 本片为深入理解协程系列文章的补充. 你将会在从本文中了解到:async/await如何运用的实际的爬虫中. 案例 从CSDN上 ...
- .NET Web应用中为什么要使用async/await异步编程
前言 什么是async/await? await和async是.NET Framework4.5框架.C#5.0语法里面出现的技术,目的是用于简化异步编程模型. async和await的关系? asy ...
- C#中 Thread,Task,Async/Await 异步编程
什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务,调 ...
- async & await 异步编程的一点巧方法
await 关键字不会创建新的线程,而是由Task任务或是FCL中的xxxAsync等方法创建的线程,而且这里创建的线程都是基于线程池创建的工作线程,属于后台线程. await关键字会阻塞/暂停调用它 ...
- ASP.Net中的async+await异步编程
在.NET Framework4.5框架.C#5.0语法中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简 ...
- async/await 异步编程(转载)
转载地址:http://www.cnblogs.com/teroy/p/4015461.html 前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入 ...
随机推荐
- RDS MySQL内存管理
官方文档地址:https://help.aliyun.com/product/26090.html?spm=5176.7920929.1290474.7.2c6f4f7bACaToi 官方文档地址:h ...
- PostgreSQL 创建数据库
PostgreSQL 创建数据库可以用以下三种方式: 1.使用 CREATE DATABASE SQL 语句来创建. 2.使用 createdb 命令来创建. 3.使用 pgAdmin 工具. CRE ...
- Petrozavodsk Winter Training Camp 2016: Moscow SU Trinity Contest
题目列表 A.ABBA E.Elvis Presley G. Biological Software Utilities J. Burnished Security Updates A.ABBA 题意 ...
- PHP全栈开发(七):PHP与MySQL存储交互(2.插入、读取)
<?php $servername = "localhost"; $username = "root"; $password = "beijin ...
- 洛谷P4304 TJOI2013 攻击装置 (二分图匹配)
题目大意:一个矩阵,一些点被拿掉,在棋盘上马走日,马之间不能落在同一点,求最多放几匹马. 采用对矩阵黑白染色,画个图可以发现:马可以走到的位置和他所处的位置颜色不同,将马和他可以走到的位置连边,最多可 ...
- 在vue项目中禁用eslint
文章目录 1.在创建项目的时候不自动使用eslint 2.在package.json中删除所有的eslint,然后重新install 3.按照图片注释(亲测可用) 在使用eslin进行规则验证时,一点 ...
- JUC(2)使用condition实现精准通知唤醒
package com.orderPC; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks. ...
- 齐博x1内容页中下一页上一页的标签
在模板中分别插入如下代码即可 前一页 {:fun('content@prev',$info,20)} 后一页 {:fun('content@next',$info,20)} 复制 其中20代表取标题多 ...
- Educational Codeforces Round 138 (Rated for Div. 2) A-E
比赛链接 A 题解 知识点:贪心. 注意到 \(m\geq n\) 时,不存在某一行或列空着,于是不能移动. 而 \(m<n\) 时,一定存在,可以移动. 时间复杂度 \(O(1)\) 空间复杂 ...
- 学习ASP.NET Core Blazor编程系列八——数据校验
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...