promise/async-await 的回调上下文
Callback context with promise/async-await
我正在尝试使用 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
?
module.exports = async function() {
try {
await db.run("INSERT INTO foo ...");
// How can I access the `this` context?
} catch (err) {
}
};
您可以定义 db.run
的智能 promisified 版本:
db.runAsync = function(query) {
return new Promise((resolve, reject) => this.run(query, function (err) {
if (err) {
reject(err)
} else {
resolve(this)
}
}))
}
然后您将能够使用此 runAsync
从您的异步等待代码访问 this
上下文:
let res = await db.runAsync('INSERT INTO foo ...')
console.log(`inserted id: ${res.lastID}`)
我正在尝试使用 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
?
module.exports = async function() {
try {
await db.run("INSERT INTO foo ...");
// How can I access the `this` context?
} catch (err) {
}
};
您可以定义 db.run
的智能 promisified 版本:
db.runAsync = function(query) {
return new Promise((resolve, reject) => this.run(query, function (err) {
if (err) {
reject(err)
} else {
resolve(this)
}
}))
}
然后您将能够使用此 runAsync
从您的异步等待代码访问 this
上下文:
let res = await db.runAsync('INSERT INTO foo ...')
console.log(`inserted id: ${res.lastID}`)