你能在生成器函数中绑定这个值吗?

时间:2016-08-12 08:44:50

标签: ecmascript-6

鉴于您需要在其体内屈服时不能使用箭头功能,是否可以设置this值以供身体侧面使用。​​

我自己创建了一个数据库库,扩展了“乏味”的库,使我可以执行以下操作

const self = this;
db.exec(function*(connection) {
  let sql = 'SELECT * FROM myTable WHERE id = @id';
  let request = connection.request(sql);
  request.addParameter('id',db.TYPE.Int, myIdValue);
  let count = yield connection.execSql(function*() {
    let row = yield;
    while(row) {
//process row with somthing like self.processRow(row);
      row=yield;
    }
  });
  if (count > 0) {
    request = connection.request('some more sql');
//etc
  }
  return something;
}).then(something => {
//do some more things if the database access was a success
}).catch(error => {
// deal with any errors.
}) ;

我发现我越来越需要从外部访问this值,并且不断地在周围函数的头部将其分配给自己。

是否可以使用bind之类的东西设置this值?在函数内部*(在多个级别下来!)

由于我可以完全访问用于实现db.execconnection.execSql的迭代器,所以如果可能的话我可以更改它们。支持它。

1 个答案:

答案 0 :(得分:0)

生成器使用this作为正常函数。

你的解决方案很少:

  • 在生成器表达式上使用.bind
  • this作为第一个/第二个参数传递给名为self
  • 的生成器
  • 使db.exec获取第二个参数thisArg,类似于array methods
  

如果向forEach()提供thisArg参数,则在调用时它将被传递给回调,以用作其此值。否则,将传递未定义的值以用作其此值。最终通过回调可观察到的这个值是根据确定函数所见的通常规则来确定的。

我建议使用最后的解决方案。