Ответ 1
Да, он должен, API Promise.resolve() поддерживает thenable как аргумент. Таким образом, передача объекта jquery defer будет работать нормально.
Это правильный способ конвертировать jQuery Deferred
в Promise
?
var p = Promise.resolve($.getJSON('api/values', null));
Есть ли другие способы сделать это?
Каковы ограничения? Я где-то читал, что отложенное jQuery не поддерживает исключения, поэтому я предполагаю, что обещание, созданное из отложенного, тоже не будет. Это верно?
Да, он должен, API Promise.resolve() поддерживает thenable как аргумент. Таким образом, передача объекта jquery defer будет работать нормально.
Я не уверен, что это сработает. Я бы рекомендовал:
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));
Я предпочел бы композицию:
const successCb1 = ()=>$.getJSON('api/values'),
successCb2 = (json)=>alert(json),
errorCb = (e)=>alert(e);
Promise
.resolve()
.then(successCb1)
.then(successCb2)
.catch(errorCb);