javascript angularjs 使用promise异步获取数据

xiaoxiao2021-02-28  78

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) { //创建一个promise var url = serverSite + '/beep/source/info/'; $http.get(url).success(function(res, status) { resolve(res); //相当于return 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) { // console.log(j,res[i].name); callback(res[i].name,j); } else { // console.log(res[i].name); callback(res[i].name); } } } }).catch(function(reason){ //失败时调用 console.log('promise'+reason); if(j) { // console.log(j,res[i].name); callback(code,j); } else { // console.log(res[i].name); callback(code); } }) }
转载请注明原文地址: https://www.6miu.com/read-50700.html

最新回复(0)