javascript类中的共享回调处理程序
Shared callback handler in a javascript class
当前的点击处理程序。
let db = new DB()
$('#action-searchByPhone').click(() => {
db.searchByPhone("0400111221", (customers) => {
console.log(customers)
})
})
我现在的班级。
我想在这个类中共享成功处理程序的功能,就像我与错误处理程序一样。因此,我可以为各种方法共享成功处理程序。
class DB {
constructor() {
this.errorHandler = (tx, error) => console.log(error)
}
searchByPhone(phone, callback) {
let successHandler = (tx, result) => {
let records = Array.from(result.rows)
callback(records) // how do I pass this in?
}
this.db.transaction((tx) => {
tx.executeSql('SELECT * FROM customer WHERE phone = ?', [phone], successHandler, this.errorHandler)
})
}
}
这是我尝试过的,但正如你所期望的那样,它不起作用。我不确定如何将回调函数传递到成功处理程序中。
class DB {
constructor() {
this.successHandler = (tx, result) => {
let records = Array.from(result.rows)
callback(records) // how do I pass this in?
}
this.errorHandler = (tx, error) => console.log(error)
}
searchByPhone(phone, callback) {
this.db.transaction((tx) => {
tx.executeSql('SELECT * FROM customer WHERE phone = ?', [phone], this.successHandler, this.errorHandler)
})
}
}
在executeSql成功回调中使用匿名箭头函数,该函数调用successshandler,并将callback作为额外参数
class DB {
constructor() {
this.successHandler = (tx, result, callback) => {
let records = Array.from(result.rows)
callback(records) // how do I pass this in?
}
this.errorHandler = (tx, error) => console.log(error)
}
searchByPhone(phone, callback) {
this.db.transaction((tx) => {
tx.executeSql('SELECT * FROM customer WHERE phone = ?', [phone], (tx, result) => this.successHandler(tx, result, callback), this.errorHandler)
})
}
}
我觉得上面的内容可以(应该)写成:
class DB {
constructor() {
}
successHandler(tx, result, callback) {
let records = Array.from(result.rows);
callback(records);
}
errorHandler(tx, error) {
console.log(error);
}
searchByPhone(phone, callback) {
this.db.transaction(tx => {
tx.executeSql('SELECT * FROM customer WHERE phone = ?', [phone], (tx, result) => this.successHandler(tx, result, callback), this.errorHandler)
});
}
}
你也可以使用bind,将callback作为第一个参数绑定到successHandler
class DB {
constructor() {
this.successHandler = (callback, tx, result) => {
let records = Array.from(result.rows)
callback(records) // how do I pass this in?
}
this.errorHandler = (tx, error) => console.log(error)
}
searchByPhone(phone, callback) {
this.db.transaction((tx) => {
tx.executeSql('SELECT * FROM customer WHERE phone = ?', [phone], this.successHandler.bind(this, callback), this.errorHandler)
})
}
}
相关文章:
- 使用Javascript中的回调处理变量分配
- 如何通过bxSlider回调api处理事件
- 如何处理Ajax.BeginForm()OnError OnFailure回调
- 如何在事件处理程序的回调中防止Default
- 错误处理try&catch+回调
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- JQuery $.getJSON() 不能正确处理回调
- 如何处理在javascript中访问数据结构的两个回调
- 回调处理
- 使用回调处理程序调用函数内部的父对象方法
- Node.js在非阻塞函数返回后的回调处理
- 具有不同回调处理程序的单一实例 Websockets 对象
- 为什么这个回调处理程序被调用两次
- 如何在Javascript中传递一个字符串或函数名列表作为回调处理
- 使用nodejs异步回调处理循环
- javascript类中的共享回调处理程序
- javascript回调-处理读取文件与fs.readFile
- 正确指代“这个”的方式在Backbone JS中保存后查看回调处理程序(成功或错误)
- Angularjs异步回调处理
- 如何在jQuery插件中编写回调处理程序函数