我对JS promise有点陌生,并且使用jQuery 1.7.1在旧系统上工作 在尝试清理一些回调混乱时,我似乎正在创建一个新的回调。 预先感谢您的帮助!
创建了用于通过Ajax访问webapi服务的实用程序。我在用 jQuery的 Deferred()而不是 new Promise(),但是最后我是 返回 Promise (承诺),一旦成功/失败, 解决/拒绝。
symlink.txt
})();
需要在上一个完成后请求新的心跳:
function testHeartBeatChaining(){
var Utils = (function () {
// private
var _timeout = 3000;
// ...
// public
return {
getHeartBeat: function(id) {
var deferred = $.Deferred();
deferred.notify('Getting a heartbeat ... ' + id);
$.ajax({
url: URLS.getHeartBeat,
type: 'GET',
contentType: "application/json; charset=utf-8",
success: function (data, textStatus, jqXHR) {
deferred.resolve(id, data);
},
error: function (jqXHR, textStatus, errorThrown) {
deferred.reject(id, makeError(jqXHR, textStatus, errorThrown));
},
timeout: _timeout
});
return deferred.promise();
}
};
// ...
}
获取以下信息:
答案 0 :(得分:0)
套入工作正常。不过,它比嵌套回调更干净。
PersoUtils.getHearthBeat(1)
.progress(function(msg) {
console.log(msg);
})
.fail(function(id, err) {
console.log('ERROR while getting beat' + id + ' : ' + err);
})
.then(function(id, beat) {
console.log('got beat ' + id + ': ' + JSON.stringify(beat));
PersoUtils.getHearthBeat(2)
.progress(function(msg) {
console.log(msg);
})
.fail(function(id, err) {
console.log('ERROR while getting beat' + id + ' : ' + err);
})
.then(function(id, beat) {
console.log('got beat ' + id + ': ' + JSON.stringify(beat));
PersoUtils.getHearthBeat(3)
.progress(function(msg) {
console.log(msg);
})
.fail(function(id, err) {
console.log('ERROR while getting beat' + id + ' : ' + err);
})
.done(function(id, beat) {
console.log('got beat ' + id + ': ' + JSON.stringify(beat));
});
return this;
});
return this;
});
结果是: