我已经读了几个地方的承诺处理器模式,但我不知道它是什么。 有人build议我在代码中使用它,如下所示: function getDb(){ return myDbDriver.getConnection(); } var users = getDb().then(function(conn){ return conn.query("SELECT name FROM users").finally(function(users){ conn.release(); }); }); 什么是承诺处理器模式,它在这里如何适用? 注意 – 在本地的承诺中,我.finally “添加拒绝和履行处理程序,返回价值,但执行一个行动”。 在这种情况下,我正在使用蓝鸟。
我正在写一个依赖于promise的angularjs应用程序,虽然它正在工作,但我不知道是否可以做得更好。 在代码的开始,我创build了一个承诺,取消一些数据。 当这样做完成后,我想运行几个都使用这个数据的函数。 这些函数附加在应用程序的不相关部分,所以我不知道它们附在promise上的顺序。 他们也不需要依次完成。 app.service("Fetch", function ($q){ return function() { var def = $q.defer(); somelibrary.asynccall(function(error, data){ //callback if (error) def.reject(error); else def.resolve(data); }); return def.promise; }; }); app.controller("ctrl", function ($scope, Fetch) { var prom = Fetch(); //somewhere: prom.then(function(data){$scope.var1 = data["VAR1"];}); //somewhere else: prom.then(function(data){$scope.var2 = data["VAR2"]}); }); 这里的主要缺点是只有在前面的结束时才执行,这在这里是不必要的。 此外,我需要在每个function(data){…}内添加return data ,否则以下then()不具有可用的data 。 有没有另外的方法来做到这一点,更适合这种情况? 编辑:正如@ jfriend00提到的,我错了; […]
你能解释我以下的短语(采取从堆栈溢出问题的答案JavaScript中的延期,承诺和未来之间有什么区别? )? 使用jQuery承诺反对使用以前的jQuerycallback的优点是什么? 不是直接将callback函数传递给函数,而是通过使用promise来导致紧密耦合的接口,从而可以分别关注同步或asynchronous的代码。
使用jQuery延迟,我习惯于能够像这样检查当前状态: var defer = $.Deferred(); defer.state(); //Returns the state of the deferred, eg 'resolved' 有没有办法做同样的Angular延期? (甚至更好的承诺)
这是我的代码的简短版本。 var Promise = require('bluebird'); var fs = Promise.promisifyAll(require("fs")); if (conditionA) { fs.writeFileAsync(file, jsonData).then(function() { return functionA(); }); } else { functionA(); } 这两个条件都调用functionA 。 有没有办法避免其他条件? 我可以做fs.writeFileSync但我正在寻找一个非阻塞的解决scheme。
我在Node.js下使用蓝鸟承诺库,这太棒了! 但是我有一个问题: 如果查看Node的child_process.exec和child_process.execFile的文档,可以看到这两个函数都返回一个ChildProcess对象。 那么推荐这种function的推荐方式是什么? 请注意,以下作品(我得到一个Promise对象): var Promise = require('bluebird'); var execAsync = Promise.promisify(require('child_process').exec); var execFileAsync = Promise.promisify(require('child_process').execFile); 但是,如何获得原始的Node.js函数的原始返回值呢? (在这些情况下,我需要能够访问最初返回的ChildProcess对象。) 任何build议,将不胜感激! 编辑: 这是一个使用child_process.exec函数的返回值的示例代码: var exec = require('child_process').exec; var child = exec('node ./commands/server.js'); child.stdout.on('data', function(data) { console.log('stdout: ' + data); }); child.stderr.on('data', function(data) { console.log('stderr: ' + data); }); child.on('close', function(code) { console.log('closing code: ' + code); […]
Promise和生成器允许您编写asynchronous代码。 我不明白为什么这两种机制都是在ECMA脚本6中引入的。什么时候最好使用promise,什么时候使用generator?
以下两个代码是否有区别? myPromise.then(function() { console.log('success'); }).catch(function() { console.log('error'); }); myPromise.then(function() { console.log('success'); }, function() { console.log('error'); }); 我知道then catch返回新的承诺解决或拒绝与callback中的价值回报。 但是我看到networking上的2个代码,我很好奇2代码之间的真正差异。
我尝试使用蓝鸟的承诺: HTML: <body ng-app="HelloApp"> <div ng-controller="HomeController">{{name}} {{also}}</div> </body> JS: // javascript var app = angular.module('HelloApp', []); app.controller("HomeController", function ($scope) { var p = Promise.delay(1000).then(function () { $scope.name = "Bluebird!"; console.log("Here!", $scope.name); }).then(function () { $scope.also = "Promises"; }); $scope.name = "$q"; $scope.also = "promises"; }); window.app = app; [ 小提琴 ] 然而,无论我尝试了什么,它仍然保持"$q promises" ,并没有更新。 除了我添加了一个手动的$scope.$apply […]
我发现了一个使用承诺的现有库,但是它不使用蓝鸟。 库函数并不具备蓝鸟所喜欢的.map()或.tap()所有额外function。 蓝鸟如何将“正常的”或“非蓝鸟”的承诺转换成蓝鸟提供的所有额外function? 我尝试包装Promise.promisify和Promise.resolve的现有承诺, Promise.promisify都没有成功。