Tôi đang gặp phải sự cố nhỏ khi trả về một giá trị từ hàm gọi lại trong Node.js, tôi sẽ cố gắng giải thích tình huống của mình dễ dàng nhất có thể. Hãy xem xét tôi có một đoạn, trong đó có URL và truy cập url đó và cho kết quả:Trả về một giá trị từ hàm gọi lại trong Node.js
urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
});
Tôi cố gắng để quấn nó bên trong một hàm và trả về một giá trị như thế này:
function doCall(urlToCall) {
urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
return finalData;
});
}
Bởi vì trong tôi đang Node.js, tôi có rất nhiều if-else
tuyên bố nơi giá trị của urlToCall
sẽ được quyết định, như thế này:
if(//somecondition) {
urlToCall = //Url1;
} else if(//someother condition) {
urlToCall = //Url2;
} else {
urlToCall = //Url3;
}
Vấn đề là tất cả các câu lệnh bên trong a urllib.request
sẽ giữ nguyên, ngoại trừ giá trị urlToCall
. Vì vậy, chắc chắn tôi cần phải đặt những mã phổ biến bên trong một chức năng. Tôi đã thử tương tự nhưng trong doCall
sẽ luôn trả lại cho tôi undefined
. Tôi đã cố gắng như thế này:
response = doCall(urlToCall);
console.log(response) //Prints undefined
Nhưng nếu tôi in giá trị bên trong doCall()
nó in một cách hoàn hảo, nhưng nó sẽ luôn luôn trở undefined
. Theo nghiên cứu của tôi, tôi đã biết rằng chúng tôi không thể trả về các giá trị từ các chức năng gọi lại! (Có đúng không)? Nếu có, bất cứ ai có thể tư vấn cho tôi cách xử lý tình huống này, vì tôi muốn ngăn chặn mã trùng lặp trong mỗi khối if-else
.
"là nó có đúng không?" - Vâng chắc chắn. –
@JanDvorak, vì vậy tôi không có bất kỳ tùy chọn nào khác ngoài việc sao chép mã? ;) –
Bạn có thể thực hiện một số trợ giúp gọi lại của riêng mình không? Tôi cũng tin là vậy. –