私はajaxで遊んでいます& ajax呼び出しの抽象版を作成することを約束しました。以下のコードは正常に動作しています。外部コールバック内のPromisの解決/拒否
function ajax(url){
var xhr = {
rq : function (method, url){
var prom = new Promise(function (resolve, reject){
var client = new XMLHttpRequest();
//only accept
client.open(method,url,true);
client.send();
client.onload = function(){
if(this.status == 200){
if(this.response == "1"){
reject(this.response);
}
else{
resolve(this.response);
}
}
else{
reject(this.statusText);
}
};
});
return prom;
}
};
return {
'get' : function(){
return xhr.rq('GET', url);
}
};
}
私はajax.onload上の関数は、コールバックとして渡すことが抽象的にしたいと私はこのような何かを考えていたが:
function ajax(url, checker){
var xhr = {
rq : function (method, url){
var prom = new Promise(function (resolve, reject){
var client = new XMLHttpRequest();
//only accept
client.open(method,url,true);
client.send();
client.onload = checker;
};
});
return prom;
}
};
return {
'get' : function(){
return xhr.rq('GET', url);
}
};
}
function chk1(){
if(this.status == 200){
if(this.response == "1"){
reject(this.response);
}
else{
resolve(this.response);
}
}
else{
reject(this.statusText);
}
}
は、残念ながら、私は解決のエラーを取得し、拒否不明です。私は問題がちょうどchk1の中にあることを知っています。約束は分かっていません。しかし、私はそれを解決する方法は不明です。
私はそれを呼び出すことができるように、このような何かしたい:
Promise.all([ajax(u,chk1).get(),ajax(v,chk1).get()])
.then(callback.success)
.catch(callback.error);
種類よろしく
あなたが好きですが必要になる場合があります 'client.onload = checker.bindできるようにするには、'(これは、拒否、解決します)あなたのチェッカーのコールバック内で約束のコールバックを解決して拒否することを参照する。 – Redu