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);
}
})
}