【问题标题】:js generator for asynchronous function用于异步函数的js生成器
【发布时间】:2015-11-29 12:32:07
【问题描述】:

如何在嵌套函数中使用yield?

function* translate(){
    socket.once( 'translate/set', function( data){
        yield data
    });

    socket.emit( 'translate/get', { query: query})
};


var data = translate().next().value;
console.log( data);

错误

yield is not defined

我不明白如何在不改变其代码的情况下使用生成器来实现异步函数

【问题讨论】:

  • 在生成器上同步调用.next 会产生一个值。这使得无法支持此工作流程。
  • 你想在这里做什么? You cannot yield from within a non-generator function(如回调)。但是你为什么要使用生成器呢?
  • 我想异步加载翻译并返回同步样式。

标签: javascript asynchronous socket.io generator ecmascript-6


【解决方案1】:

您不能在生成器的立即内部上下文之外yield。但是,您可以将回调传递给translate,产生对socket.once 的调用(给它回调),然后在调用此回调后继续执行translate

function* translate(cb){
    yield socket.once('translate/set', cb);
    socket.emit('translate/get', {query: query})
}

var translate = translate(cb);
translate().next(); // ...socket#once

function cb(data) {
    console.log(data); // data from socket#once
    translate.next(); // ...socket#emit
}

【讨论】:

  • 谢谢,但数据仍在回调中。
  • 没有办法。
猜你喜欢
  • 1970-01-01
  • 2020-11-20
  • 2017-11-10
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 2017-12-06
  • 2020-09-14
相关资源
最近更新 更多