Javascript 中的协程是怎么一回事

协程 是一种函数,其执行可以被暂停和恢复,可能传递一些数据。它们恰好适用于实现涉及不同任务/函数之间合作的各种模式,比如异步流。

在 JavaScript 中

在 JavaScript 中,你可以使用生成器函数来实现(类似)协程。你可能已经使用生成器函数来实现迭代器和序列。

function *integers(){
   
   
    let n = 0;
    while(true){
   
   
        yield ++n;
    }
}

const sequence = integers();

console.log(sequence.next().value); // > 1
console.log(sequence.next().value); // > 2
console.log(sequence.next().value); // > 3
console.log(sequence.next().value); // > 4

这里的 while(true) 很有趣(而且完全没问题),因为它证明了生成器正在惰性地被评估。当你调用 next 函数时,实际上是执行生成器,直到下一个 yield 语句。yield 右侧表达式的结果成为迭代器结果的 value,然后生成器函数暂停。

我们通常不知道的是,当恢复例程的执行时,你可以向 next 函数传递数据,这样做的效果是将该数据分配给语句“左侧”的任何变量:

function *generator() {
   
   
    while(true){
   
   
        const action = yield;
        console.log(action)
    }
}

const routine = generator();
routine.next();
routine.next('increment'); // > 'increment'
r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值