在外部回调中解决/拒绝承诺
Resolve/Reject Promis within external callback
我在玩ajax&iterated承诺为ajax调用创建一个抽象版本。下面的代码运行良好。
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);
亲切问候
您可以将resolve
和reject
传递给checker函数,以便它可以根据需要调用它们。
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 = function() {
checker.call(this, resolve, reject);
};
});
return prom;
}
};
return {
'get': function() {
return xhr.rq('GET', url);
}
};
}
function chk1(resolve, reject) {
if (this.status == 200) {
if (this.response == "1") {
reject(this.response);
} else {
resolve(this.response);
}
} else {
reject(this.statusText);
}
}
献给那些仍然关心的人。jfriend00的答案是金子。我的最终解决方案是这样的(我不得不从使用这个改为另一个参数):
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(resolve, reject, client);
});
return prom;
}
};
return {
'get' : function(){
return xhr.rq('GET', url);
}
};
}
function chk1(resolve, reject, xhr){
if(xhr.status == 200){
if(xhr.response == "1"){
reject(xhr.response);
}
else{
resolve(xhr.response);
}
}
else{
reject(xhr.statusText);
}
}
相关文章:
- 简单的ES6承诺问题-交换解决和拒绝参数
- 按照承诺和柴一起测试拒绝
- 手动拒绝路由承诺;不起作用
- 蓝鸟承诺 - 嵌套与拒绝模式
- 我怎样才能让承诺拒绝测试
- “未捕获(在承诺中)”在获取“then”方法中调用拒绝函数时
- 在jQuery中,.state()如何确定一个承诺是挂起的、已解决的还是被拒绝的
- AngularJS决心承诺.如果承诺被拒绝,则重定向
- 在$http内解决/拒绝承诺是行不通的
- 什么时候兑现或拒绝承诺的方法
- 在自定义的Jasmine匹配器中解决和拒绝承诺
- AngularJS- catch $q.拒绝承诺.然后块
- Chrome 53不捕捉未处理的拒绝承诺
- 如何在NativeScript上拒绝承诺——Angular 2
- 使用Mocha和chai -as- committed测试被拒绝承诺的特定属性
- 拒绝承诺,当不知道父var
- 在外部回调中解决/拒绝承诺
- 我什么时候该拒绝承诺
- 有条件地解决或拒绝$q承诺,使用 Jasmine 进行单元测试
- 获取:拒绝承诺,如果状态不正常,则捕获错误