В чем разница между 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'));
}