Tag: q

我怎么能保证在我的应用程序中一次性使用吞咽?

作为我正在编写的一个小程序的一部分,我想用gulp将一大组文件转换为markdown。 这不是与程序分开的构build步骤的一部分。 这是该计划的一部分。 所以我没有使用gulpfile来处理这个问题。 问题是,因为它是asynchronous的,所以我想使用一个承诺,在吞吐任务完成时会提醒我。 像这样的东西将是理想的: io.convertSrc = function() { var def = q.defer(); gulp.src(src + '/*.md') .pipe(marked({})) .pipe(gulp.dest(dist), function() { def.resolve('We are done!'); }); return def.promise; } 但pipe不会callback。 我怎么处理这个? 感谢您的帮助,我有点新的吞噬。

如何使用Q.all()与复杂的承诺数组?

考虑我有一个对象和承诺的数组,如: [{ a: 1 }, { a: 4 }, { a: 4 }, { promiseSend: [Function], valueOf: [Function] }, { promiseSend: [Function], valueOf: [Function] }] 现在,当调用I Q.all(arr)并在then()返回对象值时,什么都不会发生,而且我的数组仍然包含promise对象。 有没有什么办法与Q.all()和这样一个复杂的数组?

JavaScript承诺不传递所有参数(使用Q)

我无法通过所有参数。 我的承诺callback只接收一个而不是三个: var asyncFunction= function(resolve) { setTimeout(function() { resolve("Some string that is passed", "and another", "third"); }, 1000); }; var promiseFunction = function () { var deferred = Q.defer(); asyncFunction(deferred.resolve); return deferred.promise; }; promiseFunction().then(function() { // Only one argument is passed here instead of 3 // { '0': 'Some string that is passed' } console.log(arguments); […]

是否有纯粹的基于Promise的方法来映射/连接集合?

asynchronous与Q一般 我正在学习Node.js开发,并试图围绕pipe理asynchronous“callback地狱”的策略包装我的大脑。 我探索的两个主要策略是Caolan McMahon的asynchronous模块和Kris Kowal的基于承诺的Q模块。 像许多其他人一样,我仍然在努力去理解什么时候应该使用一个而不是另一个。 但是,总的来说,我已经发现许诺和基于Q的代码稍微直观一点,所以我一直在朝着这个方向前进。 一般地映射/连接集合 不过,我仍然坚持使用asynchronous模块的function来pipe理集合 。 从Java和Python的背景来看,大多数时候我使用一个集合,逻辑如下所示: 初始化一个新的空集合,在其中存储结果。 对旧集合执行for-each循环,对每个元素应用一些逻辑并将结果推送到新的空集合中。 当for-each循环结束时,继续使用新的集合。 在客户端JavaScript中,我习惯于使用jQuery的map()函数 …传递第2步的逻辑,并将第3步的结果作为返回值。 感觉像相同的基本方法。 使用asynchronous和Q映射/连接集合 节点端asynchronous模块具有相似的映射和连接function,但是它们不会将连接结果返回到原始范围级别。 你必须下降到callback地狱使用结果。 例: var deferred = Q.defer(); … var entries = [???]; // some array of objects with "id" attributes async.concat(entries, function (entry, callback) { callback(null, entry.id); }, function (err, ids) { // We now have the […]

创build一个空的承诺

我有一个承诺的function,可能会或可能不会做一些事情。 例如 getYear().then(function(results){ if(results.is1999) return party(); else return Q.fcall(function(){/*do nothing here*/}); }).then(sleep) 在哪里, party , sleep都会回来。 有没有更简洁的方式来写入else语句? 也就是说,什么都不做,但还是会回报一个可以链接的承诺?

如果我在Kriskowal的q中多次拒绝/解决,会发生什么?

我正在研究promise模式,并使用kriskowal的q for node.js, 有这个片段: var deferred = Q.defer(); try { messageData = JSON.parse(message); } catch (e) { global.logger.warn('Error parsing JSON message.'); deferred.reject(e); } … if (some_reason) deferred.resolve(something); … return deferred.promise; 如果parsing器都失败了, some_reason是真的呢? 执行是否会从拒绝到解决,双方都会在不同的时间被调用,从而产生一个bug? 我应该避免多次拒绝/解决?

恰当的方式来跳过Q Promise中的then函数

在我的代码中,基于特定的条件,我想跳过done函数,而不pipe所有的函数。 这个问题的原始版本是在编辑。 以下是我正在处理的实际问题。 抱歉给你带来不便 实际问题: 我在读文件并处理它。 如果文件的内容符合一定的条件,就必须对文件系统进行一系列的操作(比如读写几个文件),然后执行donefunction。 如果条件失败, 我必须跳过所有的一系列操作,我必须直接执行done函数 。 我在所有的函数中返回一个对象(让我们说result ), then在下一次我更新result并返回它。 那么,当所有这些都完成后,就会有累积的result 。 最后, done会处理result并打印出来。 所以,如果条件最初没有得到满足,那么只会打印result (这将是空的)。 Q() .then(readFile) .then(function (contents) { var processResult = process the contents; if (processResult) { return {}; } else { // How can I skip to `done` from here } }) .then(function (results) { // do some […]

使用承诺 – 在失败处理程序中logging堆栈跟踪

我对nodejs比较陌生,所以我会更详细地解释一下我正在做的事情。 我有一个networking服务器。 如果请求失败,我想logging该exception的堆栈跟踪,但是传递错误页面而不会使服务器崩溃。 例如,处理请求的函数: var Q = require('q'); var requestHandler = function () { // Here I get the data etc. that was requested. As this is not important, just a dummy here Q.resolve() // Now I answer the request .then(function (data) { // Dummy Code representing the sending of a response console.log('sending response …'); […]

如何在node.js中实际使用Q promise?

这可能是一个noob问题,但我是新的承诺,并试图找出如何在node.js中使用Q. 我看到教程开始于 promiseMeSomething() .then(function (value) {}, function (reason) {}); 但是我没有把握到底是从哪里来的。 我想这是从 var outputPromise = getInputPromise() .then(function (input) {}, function (reason) {}); 但getInputPromise()从哪里来? 我以前没有提到它。 我已经把它包含在我的项目中了 var Q = require('q'); // this is suppose, the async function I want to use promise for function async(cb) { setTimeout(function () { cb(); }, 5000); } async(function () { console.log('async […]

Node.jsasynchronous库比较 – Q vsasynchronous

我已经使用kriskowal的Q库作为一个项目(网页刮板/人类活动模拟器),并已经熟悉了承诺,返回并解决/拒绝了它们,图书馆的基本asynchronous控制stream方法和错误捕获/捕获机制已经被证实必要。 我遇到了一些问题。 我的promise.then电话和我的callback有形成金字塔的不可思议的倾向。 有时候是为了确定范围的原因,有时是为了保证一定的事件顺序。 (我想我可以通过重构来解决其中的一些问题,但是我希望完全避免“callback地狱”)。 另外,debugging非常令人沮丧。 我花了很多时间console.log我的方式来错误和错误的来源; 在我终于find它们之后,我将开始在那里抛出错误,并以最终的promise.finally将它们捕捉到别的地方,但把错误定位在首位的过程是艰巨的。 另外,在我的项目中, 订单很重要 。 我需要按顺序做很多事情。 通常我会发现自己生成的函数数组返回promise,然后使用Array.prototype.reduce将它们链接到彼此,我不认为我应该这样做。 这里是我使用这种缩减技术的一个方法的例子: removeItem: function (itemId) { var removeRegexp = new RegExp('\\/stock\\.php\\?remove=' + itemId); return this.getPage('/stock.php') .then(function (webpage) { var pageCount = 5, promiseFunctions = [], promiseSequence; // Create an array of promise-yielding functions that can run sequentially. _.times(pageCount, function (i) { var promiseFunction […]