У меня настоящая проблема с обещаниями. Я использую API так, что вы сначала запрашиваете идентификатор отчета, а затем запрашиваете идентификатор отчета, чтобы получить свои данные.
Раньше мой код ajax отлично работал с этим, пока я не попытался реализовать обещания. Теперь он отвечает только идентификатором reportID из запроса "get", но на самом деле я хочу, чтобы возвращались данные от "return (result);".
Я думаю, это связано с тем, что я использовал "return" перед getReport вверху, но если я удалю его, это нарушит мое обещание.
index2.html:16 Uncaught TypeError: Cannot read property 'done' of undefined at index2.html:16
index.html
function firstFunction() {
return getReport(2, 'queue', 'hour', '2018-09-09', '2018-09-10', 'pageviews', 'page', 's1390_5bbb443734ab6a764639ff37');
};
var test = firstFunction();
test.done(function(data) {
alert(data);
});
report.js
function getReport(ref)
{
return $.ajax({
url: "report.php",
dataType: 'json',
data: {
ref: ref
},
success: function(result){
if (type == 'queue')
{
getReport(result.reportID, 'get');
}
else if (result.error == "Bad Request")
{
}
else if (result.error == "report_not_ready")
{
setTimeout(function(){
getReport(ref, 'get');
},1000);
}
else
{
return (result);
}
}
});
}
попробуйте что-то вроде этого $ .ajax (). done (d => $ .ajax.is)). done ((finalData) => console.info (finalData))
@ Джимми, почему вы передаете несколько аргументов в getReport(), когда используете только первый ref?
@ZakariaAcharki Я вырезал их, чтобы было проще понять вопрос
Хорошо, я вижу ...



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


Вы используете поле успеха, а также обещание ... Мы не используем обещание. Все реализации в поле "success" должны вызываться в методе "done".