关于promise的神话

发表于 JS 分类,标签:

1.es6出了一个很牛逼的promise对象

var  _defer=new Promise(function(resolve,reject){
    if(true){
        resolve('成功')
    }else
    {
        resolve('失败')
    }
});

_defer.then(function(data){
    console.log(data)  // 成功
},function(){
    console.log(data)  // 失败
});

有了这个牛逼东西,我们就脱离了回调地域,牛逼的东西固然好,但是

很可惜破ie不支持这个属性啊,真实悲催,很多用户都用ie, 是不是很沮丧呢,

值得庆幸的是,很多牛逼的框架都自己内置了promise,

例如: jquery 

$.Deferred()
*
* deferred.promise() 方法允许一个异步函数阻止那些干涉其内部请求的进度(progress)或状态(status)的其它代码。
* Promise (承诺)对象仅会暴露那些需要绑定额外的处理或判断状态的延迟方法
* (then, done, fail, always, pipe, progress, state,和 promise)时,
* 并不会暴露任何用于改变状态的延迟方法
* (resolve, reject, notify, resolveWith, rejectWith, notifyWith).
var  _defer=$.Deferred();
  
if (true){
     _defer.resolve('成功');
 }{
     _defer.reject('失败');
 }
 
 
_defer.promise().then(function(data){
    console.log(data) // 成功

},function(data){
    console.log(data)  //  失败

});

再例如: angular


app.factory(,[,($q){
    {
        getServiceNav:(){
            _defer=$q.defer();  $.ajax({
                type: config.method,
                url:config.url.intelServiceNav,
                dataType: ,
                data: {
                    uid: },
                success: (data){
                    defer.resolve(data);  global.consoleLogResponse(config.showLog,,data);
                },
                error:(){
                    _defer.reject(data);      }
            });
            global.consoleLogRequest(config.showLog,,config.method,config.url.intelServiceNav,{
                uid: });
            _defer.promise; }
    }
}]);
promise = serviceNav.getServiceNav();  promise.then((data){
    $scope.serviceNavList = data.result.data;
    angular.forEach($scope.serviceNavList,(value,index) {
        $scope.scope.token[value.cAbbr]=;
    });
    $scope.scope.getToken();
},(){
    });


0 篇评论

发表我的评论