How to convert a jQuery Deferred object to an ES6 Promise

后端 未结 3 898
难免孤独
难免孤独 2020-12-28 13:28

Is this the correct way to convert jQuery Deferred to a Promise?

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

Are there any ot

相关标签:
3条回答
  • 2020-12-28 13:53

    I would prefer composition:

    const successCb1 = ()=>$.getJSON('api/values'),
    successCb2 = (json)=>alert(json),
    errorCb = (e)=>alert(e);
    Promise
       .resolve()
       .then(successCb1)
       .then(successCb2)
       .catch(errorCb);
    
    0 讨论(0)
  • 2020-12-28 14:00

    I am not sure if that would work. I would recommend:

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

    preferably you could create an adaptorfunction like:

    var toPromise = function ($promise) {
      return new Promise(function (resolve, reject) {
        $promise.then(resolve, reject);
      });
    });
    
    var p = toPromise($.getJSON('api/values', null));
    
    0 讨论(0)
  • 2020-12-28 14:01

    Yes it should, the Promise.resolve() API supports thenable as argument. So passing a jquery defer object would work just fine.

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve#Resolving_thenables_and_throwing_Errors

    0 讨论(0)
提交回复
热议问题