是否可以在javascript中有一个回调函数if 语句



这段代码可能看起来有点脏,但我只是想知道它是否真的可以。或者也许应该避免。

let cb = (valid) => {
if(valid){
console.log('hi')
}
}
if(typeof this.validate === "undefined" || this.validate(cb)){
console.log('hi')
}

因为日志输出仍然只会触发一次。但也许这种方法不是一个好主意?

您可以将条件缩短为:

if(!this.validate || this.validate(cb)) { 
// ...
}

由于您的问题是关于JavaScript中的风格/普遍接受的实践,因此这不被认为是糟糕的代码。这当然是主观的,但这并不罕见,它完成了预期的功能而不会太混乱。

好问题。

您的问题有 2 个答案,具体取决于回调函数行为。

首先为什么要回调?回调用于同一函数在不同用例下执行不同的操作。示例在获得结果后有时需要显示它,有时需要将其插入数据库。我们的函数工作是获取结果并将其传递给回调函数以进行进一步处理。

现在回答您的问题:

  1. 是的,可以在if条件下使用回调。如果回调是同步函数,这没关系。在这种情况下,我们希望我们的函数在不同情况下传递if条件,例如:

    设两个函数sumOddsumEven,这两个函数都是同步的,如果两个数之和是奇数sumOdd则返回两个数的总和,否则返回false/0,类似地sumEven两个数的偶数和。

法典:

function sumOdd(a,b) {
if ( (a+b)%2 === 0 || typeof a !== 'number' || typeof b !== 'number') return false;
return a+b;
}
function sumEven(a,b) {
if ( (a+b)%2 !== 0 || typeof a !== 'number' || typeof b !== 'number') return false;
return a+b;
}
function main(cb) {
// let x, y be two random generated numbers of input from user
let x, y;
// after some operation let main call callback function
// main function don't care about what callback function do just its working is over.
return cb(x, y);
}
// Depending upon our requirement if we want to check for odd sum pass sumOdd as callback
if ( main(sumOdd) ) {
// This works for odd sum
}
if ( main(sumEven) ) {
// This works for even sum
}

在上面的示例中使用回调很好,因为两个回调都是同步函数,并且节省了为main函数编写两个函数只是为了调用 2 个不同的函数而其余所有功能都是相同的。

    不,在if条件下使用回调是不
  1. 行的,因为如果调用函数是异步函数,并且大多数 JavaScript 回调函数调用另一个函数来发送回响应,则使用大多数回调函数。

    示例promise、API调用、数据库调用、快递getpost等函数,全部调用另一个函数发回响应。

'''

new Promise ( (resolve, reject) => {
resolve('something'); // This is again calling a function
reject('something');  // Reject is also a function
});
app.get('/api', (req, res) => {
res.send('something')    // res.send, res.json, res.end, res.write are all functions to send back response.
});

'''

总而言之,如果回调是同步的,并且所有代码在if条件下都是同步的,则可以使用。如果存在任何回调地狱或异步函数的情况,则不会。

建议您避免这种情况,因为如果维护不当可能会导致callback hell

最新更新