将具有回调的约定的node.js函数转换为生成器并产生

我是koa.js的新手,非常喜欢它,因此开始了一个项目。我需要使用twilio进行短信发送。

对twilio软件包的大多数调用都遵循此结构。

public.get('/najam', function *(){
    this.body = "hello from najam";
    //yeild before c.sendSms or inside callback?
    c.sendSms({
        to:'YOUR_PHONE',
    }, function(e, m) {
        if (!e) {
            //yeild here?
        }      
    });
});    

我如何修改它以将其放入生成器函数中?在什么时候我将使用yield关键字?

如果您的答案建议使用Co库,请提供示例代码和位说明。

只需在Promise中包装基于回调的接口,就可以在路由中产生它。

function sendSms(toPhone, textMessage) {
  return new Promise(function(resolve, reject) {
    c.sendSms({ to: toPhone, message: textMessage }, function(err, result) {
      if (err) return reject(err);
      resolve(result);
    });
  });
}

现在,您可以在路线内部生成它。如果它抛出错误(如网络中断),则Koa的默认错误处理程序将捕获该错误并将其转换为500错误。

public.get('/najam', function *(){
    this.body = "hello from najam";
    yield sendSms('YOUR_PHONE', 'SOME_MESSAGE');
});    

或者,如果您想以某种特定方式处理错误,则可以自己尝试/捕获它:

public.get('/najam', function *(){
    this.body = "hello from najam";
    var result;
    try {
      result = yield sendSms('YOUR_PHONE', 'SOME_MESSAGE');
    } catch(err) {
      // Maybe we just wanna log the error to a server before rethrowing
      // it so Koa can handle it
      logError(err);
      throw err;
    }
});    

当用Promise包装东西时,只需reject(err)在出现错误以及resolve(result)成功完成时调用即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将多次调用的回调转换为生成器函数

是否有将无参数函数转换为生成器的内置方法?

Python:将打印递归函数转换为生成器

python-将组合函数转换为生成器

如何将流转换为生成器而不会泄漏诺言的解决方案

将函数转换为不带参数的生成器函数

将递归 Python 生成器函数转换为非生成器函数

如何将基于回调的异步函数转换为异步生成器

将生成器转换为普通函数

为什么将范围对象转换为生成器会导致生成“ range_iterator”对象?

重写将生成具有固定总和的数字组合的函数作为生成器

如何使Python将函数识别为生成器函数?

python如何将函数解释为生成器

Yii2如何将SUM SQL函数转换为查询生成器?

使用生成器函数next()作为node.js中的回调

将口才生成器转换为查询生成器

将查询生成器转换为雄辩的生成器

将基于System.Random的生成器转换为FsCheck生成器

如何从生成器函数调用的异步回调中产生收益?

Sql 查询生成器将数据转换为字符

将SQL查询转换为查询生成器样式

如何将生成器对象转换为列表?

将生成器对象转换为列表以进行调试

将Observable转换为异步生成器

将原始sql转换为laravel查询生成器

Hygen 模板生成器将引号转换为 '

如何将通过TIME()函数过滤的mysql查询转换为laravel查询生成器?

为什么将列表转换为集合要比将生成器转换为集合快?

如何将在左联接内具有联接的SQL转换为查询生成器?