2

我正在尝试使用 ES7 异步等待功能来避免在我的某些代码中出现回调地狱。我正在使用 SQLite,我需要在回调的上下文中访问一个变量。

为了说明,这是来自 sqlite3 npm 模块的东西:

module.exports = function() {
  db.run("INSERT INTO foo ...", function(err) {
    // err is null if insertion was successful
    console.log("inserted id:", this.lastID);
  });
};

假设我创建了一个运行上述代码的 Promise,我如何this.lastID使用 async-await 功能访问它?

module.exports = async function() {
  try {
    await db.run("INSERT INTO foo ...");
    // How can I access the `this` context?
  } catch (err) {
  }
};
4

1 回答 1

1

您可以定义一个智能承诺版本db.run

db.runAsync = function(query) {
  return new Promise((resolve, reject) => this.run(query, function (err) {
    if (err) {
      reject(err)
    } else {
      resolve(this)
    }
  }))
}

然后,您将能够使用它从您的 async-await 代码runAsync中访问上下文:this

let res = await db.runAsync('INSERT INTO foo ...')
console.log(`inserted id: ${res.lastID}`)
于 2015-08-25T21:47:27.473 回答