Tag: q

你如何正确地从承诺中返回多个值?

我最近遇到了一些情况,我不知道如何正确解决。 假设下面的代码: somethingAsync() .then( afterSomething ) .then( afterSomethingElse ) function afterSomething( amazingData ) { return processAsync( amazingData ); } function afterSomethingElse( processedData ) { } 现在可能会出现我想在afterSomethingElse访问amazingData的afterSomethingElse 。 一个明显的解决scheme是从afterSomething返回一个数组或一个哈希值,因为,你只能从一个函数返回一个值。 但是我想知道是否有方法让afterSomethingElse接受两个参数并且同样调用它,因为这似乎更容易logging和理解。 我只是想知道这种可能性,因为有Q.spread ,它做了类似于我想要的东西。

为什么在使用promise的时候,这个在类方法中是未定义的?

我有一个JavaScript类,每个方法返回一个Q诺。 我想知道为什么this是未定义在method2和method3 。 有没有更正确的方法来编写这段代码? function MyClass(opts){ this.options = opts; return this.method1() .then(this.method2) .then(this.method3); } MyClass.prototype.method1 = function(){ // …q stuff… console.log(this.options); // logs "opts" object return deferred.promise; }; MyClass.prototype.method2 = function(method1resolve){ // …q stuff… console.log(this); // logs undefined return deferred.promise; }; MyClass.prototype.method3 = function(method2resolve){ // …q stuff… console.log(this); // logs undefined return deferred.promise; }; 我可以通过使用bind来解决这个问题: […]

使用jQuery或Q.Js作为承诺

我正在研究BreezeJs,并且有示例使用Q.js来承诺处理asynchronous调用。 John Papa也使用Q. JQuery也有承诺 。 两者有什么区别?

与承诺循环

用承诺做一个while循环的习惯用法是什么? 所以: 如果情况仍然存在,请做一些事情再重复一遍,然后做一些其他的事情。 dosomething.then(possilblydomoresomethings).then(finish) 我这样做,我想知道是否有更好的/更多的idomatic方法? var q = require('q'); var index = 1; var useless = function(){ var currentIndex = index; console.log(currentIndex) var deferred = q.defer(); setTimeout(function(){ if(currentIndex > 10) deferred.resolve(false); else deferred.resolve(true); },500); return deferred.promise; } var control = function(cont){ var deferred = q.defer(); if(cont){ index = index + 1; useless().then(control).then(function(){ deferred.resolve(); }); } […]

用Node.js中的promise来replacecallback

我有一个简单的节点模块连接到一个数据库,并有几个function来接收数据,例如这个function: dbConnection.js: import mysql from 'mysql'; const connection = mysql.createConnection({ host: 'localhost', user: 'user', password: 'password', database: 'db' }); export default { getUsers(callback) { connection.connect(() => { connection.query('SELECT * FROM Users', (err, result) => { if (!err){ callback(result); } }); }); } }; 该模块将从另一个节点模块中被调用: app.js: import dbCon from './dbConnection.js'; dbCon.getUsers(console.log); 我想用promise来代替callback来返回数据。 到目前为止,我已经阅读了以下线程中的嵌套承诺: 使用嵌套承诺编写干净的代码 ,但找不到任何足够简单的解决scheme。 使用承诺返回result的正确方法是什么?

如何检查一个有angular度的$ q承诺是否被解决

我明白,通常在使用promise的时候,只需要使用then()调用和连锁行为来附加延续代码。 但是,我想要启动承诺封装的asynchronous调用,然后单独启动一个3秒的$timeout()以便我可以执行UI操作,只有在原始承诺尚未完成的情况下。 (我预计这只会发生在连接速度慢,3G上的移动设备等) 有了承诺,我可以检查是否完整或没有阻塞或等待?

在工作时,Angular $ q.q怎么样?

有人可以解释我在AngularJS上工作时怎么样? 我试图分析$http如何工作,发现这一点: var promise = $q.when(config); 这里是来自Chrome控制台的configuration对象: Object {transformRequest: Array[1], transformResponse: Array[1], cache: Object, method: "GET", url: "/schedule/month_index.html"…} cache: Object headers: Object method: "GET" transformRequest: Array[1] transformResponse: Array[1] url: "/schedule/month_index.html" __proto__: Object 接下来发生什么? 如何解决或拒绝这个对象?

返回值或Promise.resolve与then()之间的区别是什么

有什么区别: new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return "bbb"; }) .then(function(result) { console.log(result); }); 和这个: new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return Promise.resolve("bbb"); }) .then(function(result) { console.log(result); }); 我问,因为我得到不同的行为使用Angular和$ http服务链接.then()。 因此,上面的例子有点太多了。

我如何判断一个对象是否是一个Promise?

无论是ES6承诺还是蓝鸟承诺,Q承诺等等。 我如何testing以查看给定对象是否是Promise?

现在是否还有使用Q或BlueBird等承诺库的理由,因为我们拥有ES6承诺?

在Node.js添加了对promise的本地支持之后,是否还有理由使用像Q或者BlueBird这样的库? 例如,如果您正在开始一个新项目,并假设在这个项目中没有任何使用这些库的依赖关系,那么我们可以说没有更多的理由来使用这样的库吗?