Подтвердить что ты не робот

Как преобразовать объект JQuery Deferred в ES6 Promise

Это правильный способ конвертировать jQuery Deferred в Promise?

var p = Promise.resolve($.getJSON('api/values', null));

Есть ли другие способы сделать это?

Каковы ограничения? Я где-то читал, что отложенное jQuery не поддерживает исключения, поэтому я предполагаю, что обещание, созданное из отложенного, тоже не будет. Это верно?

4b9b3361

Ответ 2

Я не уверен, что это сработает. Я бы рекомендовал:

var p = new Promise(function (resolve, reject) {
  $.getJSON('api/values', null)
    .then(resolve, reject);
});

желательно создать такую ​​адаптацию, как:

var toPromise = function ($promise) {
  return new Promise(function (resolve, reject) {
    $promise.then(resolve, reject);
  });
});

var p = toPromise($.getJSON('api/values', null));

Ответ 3

Я предпочел бы композицию:

const successCb1 = ()=>$.getJSON('api/values'),
successCb2 = (json)=>alert(json),
errorCb = (e)=>alert(e);
Promise
   .resolve()
   .then(successCb1)
   .then(successCb2)
   .catch(errorCb);