我正在使用一个 API,它希望我传递卡的前四位数字,然后它会返回卡所在国家/地区。现在,这是我的问题。事实证明,我调用的函数是异步的,当我尝试返回国家/地区时,它实际上在异步调用完全执行之前就转到了返回值。我希望调用是同步的,这意味着我不希望函数返回默认数据并等待 API 的实际响应。这是我到目前为止所尝试的。我实际上使用 console.log() 语句来解决整个问题。
module.exports = {
bvncheck: function (cardnum) {
console.log("cardnumber", cardnum);
flutterwave.BIN.check(cardnum, function (req, res) {
var country = res.body.data.country;
console.log("country", country);
return country;
});
}
};
app.post('/checkcardbin', function (req, res) {
var cardnumber = req.body.cardnumber;
//var r = fd.bvncheck(cardnumber);
var r = fd.bvncheck(cardnumber);
console.log("result", r);
});
我期望按以下顺序输出以下内容 -
1. cardnumber *****
2. country *****
3. result ******
但实际上,它按以下顺序返回我,并且由于异步性质,我得到的结果是未定义的,因为数据是在函数实际执行完成之前返回的。
1. cardnumber *****
2. result ******
3. country *****
如何解决这个问题?非常感谢任何建议或建议。
最佳答案
我必须通过包含回调来更改您的模块。这样fd.bvncheck
就会等待回调。
module.exports = {
bvncheck: function (cardnum, callback) {
console.log("cardnumber", cardnum);
flutterwave.BIN.check(cardnum, function (req, res) {
var country = res.body.data.country;
console.log("country", country);
callback(country);
});
}
}
app.post('/checkcardbin', function (req, res) {
var cardnumber = req.body.cardnumber;
//var r = fd.bvncheck(cardnumber);
fd.bvncheck(cardnumber, function(r) {
console.log("result", r);
});
});
关于javascript - 在 Node js 中将异步函数转换为同步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45483545/