Tag: 诺言

定义像Q中的空蓝鸟许诺

用QI可以定义一个新的承诺: var queue = q(); 但是,如果我这样做,蓝鸟: var queue = new Promise(); 我得到: TypeError: the promise constructor requires a resolver function 我怎样才能得到和Q一样的结果? 这是我的代码片段: var queue = q() promises = []; queue = queue.then(function () { return Main.gitControl.gitAdd(fileObj.filename, updateIndex); }); // Here more promises are added to queue in the same way used above… promises.push(queue); return Promise.all(promises).then(function […]

在javascript中recursion地构build一个承诺链 – 内存考虑

在这个答案中 ,一个promise链是recursion地构build的。 稍微简化一下,我们有: function foo() { function doo() { // always return a promise if (/* more to do */) { return doSomethingAsync().then(doo); } else { return Promise.resolve(); } } return doo(); // returns a promise } 据推测,这将产生一个调用堆栈和承诺链 – 即“深”和“宽”。 我预计内存的峰值会比执行recursion或者单独构build一个承诺链要大。 这是吗? 有没有人以这种方式考虑过构build连锁店的内存问题? 内存消耗会有所不同吗?

停止angularUI路由器导航,直到承诺解决

我想防止一些闪烁发生时,轨道devise超时发生,但angular度不知道,直到从资源的下一个授权错误。 会发生什么是模板呈现,一些AJAX调用资源发生,然后我们被redirect到轨道deviselogin。 我宁愿做一个ping导轨上的每一个状态的变化,如果rails会话过期,那么我会立即redirect之前,模板呈现。 UI路由器已解决,可以放在每一个路线,但似乎并不DRY。 我拥有的是这个。 但是这个承诺在国家已经过渡之前是不会解决的。 $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){ //check that user is logged in $http.get('/api/ping').success(function(data){ if (data.signed_in) { $scope.signedIn = true; } else { window.location.href = '/rails/devise/login_path' } }) }); 在新模板呈现之前,如何根据promise的结果中断状态转换?

如何打破承诺链

我以这样的方式承诺, function getMode(){ var deferred = Promise.defer(); checkIf('A') .then(function(bool){ if(bool){ deferred.resolve('A'); }else{ return checkIf('B'); } }).then(function(bool){ if(bool){ deferred.resolve('B'); }else{ return checkIf('C'); } }).then(function(bool){ if(bool){ deferred.resolve('C'); }else{ deferred.reject(); } }); return deferred.promise; } checkIf返回一个promise,并且是checkIf 不能被修改 。 如何在第一场比赛中突围? (除了明确抛出错误以外的任何方式?)

不是承诺只是callback?

我一直在开发JavaScript几年,我根本不明白承诺的大惊小怪。 看来我所做的只是改变: api(function(result){ api2(function(result2){ api3(function(result3){ // do work }); }); }); 我可以使用类似asynchronous的库,像这样: api().then(function(result){ api2().then(function(result2){ api3().then(function(result3){ // do work }); }); }); 哪些是更多的代码和更less的可读性。 我在这里没有获得任何东西,也不是突然神奇的“平坦”。 更不用说把事情转化为承诺。 那么,在这里承诺有什么大惊小怪呢?

如何将现有的callbackAPI转换为承诺?

我想使用承诺,但我有一个格式的callbackAPI: 1. DOM负载或其他一次性事件: window.onload; // set to callback … window.onload = function(){ }; 2.普通callback: function request(onChangeHandler){ … request(function(){ // change happened }); 3.节点样式callback(“nodeback”): function getStuff(dat,callback){ … getStuff("dataParam",function(err,data){ } 4.具有节点样式callback的整个库: API; API.one(function(err,data){ API.two(function(err,data2){ API.three(function(err,data3){ }) }); }); 我如何在承诺中使用API​​,如何“promisify”呢?