У меня возникла небольшая проблема с возвратом значения из функции обратного вызова в Node.js, я постараюсь максимально упростить мою ситуацию. У меня есть фрагмент, который берет URL-адрес и удаляет этот URL-адрес и дает результат:
urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
});
Я попытался обернуть его внутри функции и вернуть значение, подобное этому:
function doCall(urlToCall) {
urllib.request(urlToCall, { wd: 'nodejs' }, function (err, data, response) {
var statusCode = response.statusCode;
finalData = getResponseJson(statusCode, data.toString());
return finalData;
});
}
Потому что в моем Node.js-коде у меня есть много операторов if-else
, где будет определено значение urlToCall
, например:
if(//somecondition) {
urlToCall = //Url1;
} else if(//someother condition) {
urlToCall = //Url2;
} else {
urlToCall = //Url3;
}
Вещь - все утверждения внутри urllib.request
останутся такими же, кроме значения urlToCall
. Поэтому определенно мне нужно включить этот общий код внутри функции. Я пробовал то же самое, но в doCall
всегда вернет мне undefined
. Я пробовал вот так:
response = doCall(urlToCall);
console.log(response) //Prints undefined
Но если я печатаю значение внутри doCall()
, он отлично отпечатывается, но он всегда будет возвращать undefined
. Согласно моему исследованию, я узнал, что мы не можем вернуть значения из функций обратного вызова! (это правда)? Если да, можете ли кто-нибудь советовать мне, как справиться с этой ситуацией, поскольку я хочу предотвратить дублирование кода в каждом блоке if-else
.