В чем разница между Promise и AJAX?
и обещания, и вызовы AJAX являются асинхронными операциями. Запрос GET/POST может быть сделан с обоими. Edit: это неправильное утверждение
Так в чем же разница между ними? И когда лучше использовать одно вместо другого?
кроме того, еще одна вещь:
function threadsGet() {
return new Promise((resolve, reject) => {
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
})
}
здесь используется jQuery. И вызов AJAX имеет поведение и свойства Promise. Я не понял этого раньше, но вот мои мысли.:
Мы можем что-то сделать в обетовании. Затем используйте вызов AJAX и в done
функция передает разрешенную логику обещания. Конкретно в этом примере их нет.
теперь я вижу, что я смущен как. Это в значительной степени 2 разные вещи. Только потому, что они асинхронны, не означает, что они сменный.
==============
EDIT 2: просто некоторые материалы, которые я нашел полезными:
1 ответов
вас смущают обещания и вызовы Ajax. Они похожи на яблоки и ножи. Вы можете разрезать яблоко ножом, а нож-это инструмент, который можно применить к яблоку, но это две совершенно разные вещи.
Promises-это инструмент для управления асинхронными операциями. Они отслеживают, когда асинхронные операции завершены и каковы их результаты, и позволяют координировать это завершение и эти результаты (включая условия ошибки) с другим кодом или другие асинхронные операции. Сами по себе они не являются асинхронными операциями. Вызов Ajax-это определенная асинхронная операция, которая может использоваться с традиционным интерфейсом обратного вызова или обернута в интерфейс promise.
так в чем же разница между ними? И когда лучше использовать один вместо другого?
вызов Ajax-это определенный тип асинхронной операции. Вы можете сделать AJAX-вызовы с традиционный обратный вызов с помощью XMLHttpRequest
интерфейс или вы можете сделать вызов Ajax (в современных браузерах), используя обещание с fetch()
интерфейс.
недавно я столкнулся с обещанием, в теле которого был Аякс. Почему? поместить асинхронную операцию внутри асинхронной операции? Это как положить буханка хлеба в бутерброде.
вы не показали конкретный код, о котором вы говорили, но иногда вы хотите запустите асинхронную операцию 1, а затем, когда эта асинхронная операция будет выполнена, вы хотите, чтобы они начали асинхронную операцию 2 (часто используя результаты первого). В этом случае, вы, как правило, вложить один в другой.
ваш пример кода здесь:
function threadsGet() {
return new Promise((resolve, reject) => {
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
})
}
считается обещание анти-шаблон. Нет причин создавать новое обещание здесь, потому что $.getJSON()
уже возвращает обещание, которое вы сможете вернуться. Ты можешь просто сделать это. вместо этого:
function threadsGet() {
return $.getJSON('api/threads');
}
или, если вы хотите "бросить" несколько нестандартное обещание jQuery на стандартное обещание, вы можете сделать следующее:
function threadsGet() {
return Promise.resolve($.getJSON('api/threads'));
}