Promise 的 getJSONP 函数
getJSONP function to a Promise
我有一个从原型函数内部调用的 getJSONP 函数。我正在将一个 JSON 对象传递给该函数并更改其中的值,我希望能够在它准备好后使用更新的对象,但我似乎无法 return 该对象,只能调用与回调不同的功能并在那里使用它。
我想我理解 promises 的概念,但我如何将我的函数变成 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。
用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
});
});
我有一个从原型函数内部调用的 getJSONP 函数。我正在将一个 JSON 对象传递给该函数并更改其中的值,我希望能够在它准备好后使用更新的对象,但我似乎无法 return 该对象,只能调用与回调不同的功能并在那里使用它。
我想我理解 promises 的概念,但我如何将我的函数变成 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。
用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
});
});