Я использую hapi и memcached в своей службе узлов:
var usrarray=[];
const server=Hapi.server({
host:'localhost',
port:8080
});
server.route([
{
method : 'POST',
path:'/getdata',
handler : function(request,reply){
var usr=request.payload.usr;
var arr = usr.split(",");
var p=getdata(arr);
p.then(function(data){
console.info(data);
}).catch(function(err){
console.info(err)
});
//return data;
}
}
]);
function getdata(arr)
{
try{
return new Promise
( (resolve,reject)=> {
for(var i=0;i<arr.length;i++)
{
var user=arr[i];
cached.get(user)
.then((data) => {
if (data)
{
usrarray.push(data);
}
}, (err) => {
console.info(err);
return reject(err);
})
if (i==(arr.length-1))
{
return resolve(usrarray);
}
}
}
)
} catch(err) {
console.error(err)
return err;
}
}
Это полезная нагрузка json, которую я отправляю в вышеуказанную службу через почтальона.
{"usr":"2,22"}
Когда я нажимаю URL-адрес в почтальоне, служба узла печатает пустой ответ. Это фрагмент кода из приведенного выше кода, в котором печатаются данные:
p.then(function(data){
console.info(data); //this prints the data returned by the promise in `getdata(arr)` function
}
Когда я нажимаю URL-адрес во второй раз, он печатает правильный результат. Он всегда печатает правильный результат после первого раза. Я получаю пустой ответ только тогда, когда впервые нажимаю URL-адрес. Я получаю данные из memcache при первом попадании по URL-адресу.
Поэтому я не могу понять, почему функция getdata(arr) возвращает пустой ответ, когда я впервые нажимаю URL-адрес. Что не так с моим кодом?
Ваша handler функция не могуreturn данные асинхронной операции. Какой бы ни была эта функция server.route, по-видимому, она предоставляет вашему обработчику способ асинхронно предоставить ответ. (В Express или Koa это неотъемлемая часть того, как они работают, вы вызываете send объект ответа, и вызов не обязательно должен быть во время вызова обработчика маршрута.)
ок спасибо пройдусь по ссылкам



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Связано: stackoverflow.com/questions/23803743/…