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
求职面试
//面试 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的方式求职 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,最后同样返回信息“求职已经结束“
/** * 主线程 */ (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'); })();