promise是一种新对象,可以很好的处理异步请求,有些使用场景callback回调函数不适用,这个时候就可以使用promise。 在浏览器中存在兼容问题,非常旧版的谷歌浏览器可能不支持
首先举一个简单的例子(非angular)
var myFirstPromise = new Promise(function(resolve, reject){
//当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
//在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法.
setTimeout(function(){
resolve("成功!"); //代码正常执行!
}, 250);
});
function a(){
myFirstPromise.then(function(successMessage){
//successMessage的值是上面调用resolve(...)方法传入的值.
//successMessage参数不一定非要是字符串类型,这里只是举个例子
console.log("Yay! " + successMessage);
return successMessage;
});
}
下面举例一个项目中封装的$http请求(angular)
var getDataPromise = new Promise(function(resolve, reject) {
var url = serverSite + '/beep/source/info/';
$http.get(url).success(function(res, status) {
resolve(res);
})
})
$scope.sourceCodeToName = function(code, callback,index) {
var j=index;
getDataPromise.then(function(res) {
for (var i in res) {
if (code == res[i].code) {
if(j)
{
callback(res[i].name,j);
}
else {
callback(res[i].name);
}
}
}
}).catch(function(reason){
console.log('promise'+reason);
if(j)
{
callback(code,j);
}
else {
callback(code);
}
})
}