2

我有一个从原型函数内部调用的 getJSONP 函数。我将一个 JSON 对象传递给该函数并更改其中的值,我希望能够在它准备好后使用更新的对象,但我似乎无法返回该对象,只能从回调中调用不同的函数并使用它那里。

我想我理解 Promise 的概念,但我怎样才能将我的函数更改为 Promise 并在它准备好时使用它?

这是 getJSONP 函数:

function getJSONP(url, success) {
  var ud = '_' + +new Date,
    script = document.createElement('script'),
    head = document.getElementsByTagName('head')[0] || document.documentElement;

  window[ud] = function(data) {
    head.removeChild(script);
    success && success(data);
  };

  url += '?callback=' + ud;
  script.src = url;
  head.appendChild(script);
};

这就是我使用它的方式:

MyClass.prototype.mySpecialFunction = function(myObject) {
    getJSONP(myURL,function(data) {
      //doing alot of stuff
      ...
      //myObject.myArr = code the pushes a lot of stuff into an array
      workWithTheNewArray(myObject) // where i work with the full array
    });
});

请考虑到我没有使用 jQuery(因为性能和大小),但我使用的是jqlite

4

1 回答 1

2

使用pormise polyfill怎么样,他们声称它是轻量级的并且支持 IE,那么你可以试试下面的代码:

function getJSONP(url, success) {
  return new Promise(function(resolve, reject){
    var ud = '_' + +new Date,
    script = document.createElement('script'),
    head = document.getElementsByTagName('head')[0] || document.documentElement;

    window[ud] = function(data) {
      head.removeChild(script);
      resolve(data);
    };

    url += '?callback=' + ud;
    script.src = url;
    head.appendChild(script);
  });
};

MyClass.prototype.mySpecialFunction = function(myObject) {
    return getJSONP(myURL).then(function(data) {
      //doing alot of stuff
      ...
      //myObject.myArr = code the pushes a lot of stuff into an array
      workWithTheNewArray(myObject) // where i work with the full array
    });
});
于 2015-07-28T10:21:00.933 回答