js异步流程的promise及 Generator函数

1. Promise

const p1 = new Promise(function(resolve,reject){
   resolve('任务一')//成功
})
.then(function(data){//成功执行then方法将resolve的参数传到data
  console.log(data)
})

const p2 = new Promise(function(resolve,reject){
  setTimeout(function(){//定时器
    resolve('任务二')
  },200)          
})
.then(function(data){
  console.log(data)
})

console.log('主线程任务')

Promise.all([p1,p2])//先执行all中所有任务, 执行完成之后再去执行后面的任务
.then(data => {
  console.log('任务三')
})
//输出结果:主线程任务 任务一 任务二 任务三

Promise.race([p1,p2])//任务快的先输出
.then(data => {
  console.log('任务三')
})
//输出结果:主线程任务 任务一 任务三 任务二

2. Generator函数

  • 概念,在function关键字后面写一个*,表示一个generator函数,generator通过yield关键字来定义任务
function* p1(){
   yield '任务1';
   yield '任务2';
   yield '任务3';
   yield '任务4';
   yield '任务5';
   yield function* p2() {
     yield '任务7'
     }
   return '任务6'
 }
var p = p1();
//一次p.next()只执行一次
console.log(p.next())//{ value: '任务1', done: false }
console.log(p.next())//{ value: '任务2', done: false }
console.log(p.next())//{ value: '任务3', done: false }      
console.log(p.next())//{ value: '任务4', done: false }
console.log(p.next())//{ value: '任务5', done: false }
console.log(p.next())//{ value: underfined, done: false }
console.log(p.next())//{ value: '任务6', done: false }
console.log(p.next())//{ value: underfined, done: false }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Generator函数是ES6中的一种特殊函数,可以被暂停和恢复执行,可以生成一个迭代器对象。Generator函数使用function*关键字声明,内部使用yield语句来暂停函数执行并返回一个值,同时可以使用next()方法恢复函数执行并传入一个值作为上一个yield表达式的返回值。 下面是一个简单的Generator函数示例: ```javascript function* myGenerator() { yield 'apple'; yield 'banana'; yield 'orange'; } const iterator = myGenerator(); console.log(iterator.next().value); // 输出:'apple' console.log(iterator.next().value); // 输出:'banana' console.log(iterator.next().value); // 输出:'orange' console.log(iterator.next().value); // 输出:undefined ``` 在上面的示例中,myGenerator函数使用yield语句来暂停函数执行并返回一个值。当调用next()方法时,函数会从上一个yield语句处恢复执行,并将传入的值作为上一个yield表达式的返回值。当函数执行到最后一个yield语句时,再调用next()方法会返回一个value属性为undefined的对象,表示生成器已经结束。 Generator函数可以用于异步编程,可以使用yield语句暂停异步操作的执行,等待异步操作完成后再恢复执行。下面是一个简单的异步操作的Generator函数示例: ```javascript function* myAsyncGenerator() { const response = yield fetch('https://jsonplaceholder.typicode.com/todos/1'); const json = yield response.json(); console.log(json); } const iterator = myAsyncGenerator(); const promise = iterator.next().value; promise.then(response => iterator.next(response).value) .then(json => iterator.next(json)); ``` 在上面的示例中,myAsyncGenerator函数首先使用yield语句暂停函数执行并返回一个promise对象,等待异步操作完成后再恢复执行。在调用next()方法时,我们可以通过Promise的then()方法获取异步操作的结果并传入next()方法,从而实现异步操作的暂停和恢复执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值