我试图理解javascript(typescript)中的回调机制。如果我有一个函数需要一个回调作为输入参数,我是否必须显式地使用一个return语句将它与实际的回调实现从调用代码挂钩或者我们可以在被调用的代码中使用“callback”引用它会自动与调用代码中的回调代码挂钩
代码示例(类型)
// callback code being hooked up using return statement
clear(collectionName: string, callback: any) {
this.getConnection((err, db) => {
if (!db)
return callback(err, null);
db.collection(collectionName).remove();
});
return callback();
}
// callback code being hooked up using reference to reserved callback keyword for automatic hook up with calling code
clear(collectionName: string, callback: any) {
this.getConnection((err, db) => {
if (!db)
return callback(err, null);
db.collection(collectionName).remove({}, callback);
});
}
答案 0 :(得分:1)
您无需返回,只需将其称为
即可clear(collectionName: string, callback: any) {
this.getConnection((err, db) => {
if (!db)
callback(err, null);
db.collection(collectionName).remove();
});
return callback();
}
// callback code being hooked up using reference to reserved callback keyword for automatic hook up with calling code
clear(collectionName: string, callback: any) {
this.getConnection((err, db) => {
if (!db)
callback(err, null);
db.collection(collectionName).remove({}, callback);
});
}
答案 1 :(得分:0)
没有。函数是Javascript中的一等公民,因此您可以将它们用作普通变量并将它们全部传递。您只需在适当的时刻调用它们(作为正常功能)。不需要退货声明。例如,看看Array.prototype.forEach
如何在幕后工作。它接受回调作为参数,将当前迭代元素作为第一个参数,当前索引作为第二个参数:
Array.prototype.forEach = function(callback) {
for(i = 0; i < this.length; i++) {
if (callback) callback(this[i], i)
}
}