Tag: 诺言

如何确认更新是否成功使用mongoose和蓝鸟的承诺

我正在使用bluebird和mongoose作为节点页面。 我想检查更新是否成功,然后通过socket.js发送数据到客户端。这里是我无法弄清楚的代码部分: .then(function(a) { var g = collection3.update({ _id: a.one[0]._id }, { $set: { avg: a.one[0].avg } }).function(err, d) { if (!err) { return 1; // Here's the problem } }) return { updated: g, info: a }; }).then(function(c) { console.log(c.updated); // I can't get the `1` value if (c == 1) { io.sockets.in('index|1').emit("estimate", c.three); […]

为什么在callback函数setInterval中取消蓝鸟承诺?

Promise = require 'bluebird' cb = -> console.log 'callback!' p = Promise.resolve(5) .cancellable() .tap -> p.cancel() setInterval(cb, 100) cb函数只能被调用一次。 注释.tap -> p.cancel()允许它重复运行。 添加一个try块没有帮助。 也许这是显而易见的,但我做了一些研究,找不到解释。

Node.js Promise没有按顺序执行

在我启动Web服务器之前,我想为configuration文件创build一些本地目录,而不是 // app.js var fsPromise = require('./fs-promise.js'); var httpPromise = require('./http-promise.js'); var promise = require('promise'); promise.all([fsPromise.createDir('configs'), fsPromise.createDir('logs')]) .then(httpPromise.startServer()); // fs-promise.js var fs = require('fs'); var promise = require('promise'); module.exports = { … createDir: function(directory) { return new promise(function(fulfill, reject) { //console.log('Creating new dir: ' + directory); var newDir = __dirname + "\\" + directory; fs.mkdir(newDir, […]

mongoose承诺不传递数据到下一个链

我用promise来查询MongoDB。 结果只能在第一个.then(function(results){ // can send the result from here..}) 。 但是,当我操纵结果,并将其传递给下一个.then()链,它是不可访问的。 以下是完整的function。 exports.getAcl = function(req, res) { User.findAsync({}, { acl: 1 }) .then(function(results){ var aclList = []; results.forEach(function(result,index,arr){ aclList[result._id] = result; if (index === (arr.length – 1)) { console.log('I can log the aclList here..', aclList) return aclList // But neither able to send it to […]

(蓝鸟)中的咕噜声无声错误?

我有一个以main()函数为起点的npm模块。 现在,让我们说我在这个main()抛出一个Error,如下所示: function main() { throw new Error("An error!"); } 然后用node my-app-that-launchers-main.js执行它,然后显然,错误被抛出,我得到一个node my-app-that-launchers-main.js 。 如果我为此写一个咕噜的任务: var mynpm = require("mynpm"); module.exports = function(grunt) { grunt.registerTask("build",function() { mynpm.build(); }); } 并通过Grunt执行它,然后失败。 如预期的那样,错误被抛出,咕噜声失败。 不过,如果我把这个扔在蓝鸟的承诺里面: function main() { Promise.try(function(resolve) { throw new Error("An error!"); } ).catch(function() { console.log("error"); } ).finally(function() { console.log("finally"); }); } 并通过node运行,然后我看到catch函数被调用。 正如所料。 但是,如果我通过Grunt的registertask运行相同的代码,一切都变得沉默。 也不是finally的结果。 什么可能造成这一点。 […]

mongoose批量保存与承诺

我正在探索使用q而不是asynchronous – 然后我遇到了这里解决的问题: mongooseJS承诺? 或者如何pipe理批量保存 如果我使用q,这个答案会是什么?

Youtube API,NodeJS和Promise问题

我在Node中正在进行的项目的一部分工作非常挣扎。 几个星期前我第一次开始使用Node,所以我对它很陌生,在编码方面我也不是很有经验。 我有一个名为video.js的库,我想获取特定播放列表的video列表。 我有一个在控制器中调用的原型函数getVideoList,该函数获取播放列表的id以及其他一些信息,然后对youtube进行API调用并获取结果。 如果有超过50的结果,那么在响应中会有nextPageToken属性。 如果有,那么我将不得不再次进行API调用,以便获得结果的下一页。 (我不认为有可能在一个API调用中获得所有video对象。) 发生什么事的例子: code starts first loop finishes promise fulfilled second loop starts second loop finishes … meanwhile the rest of the code is already moving along to the next function (that needs to have the second loops results added to the data videolist) 截至目前,这段代码首先调用了API,并将dataObj推入videoList。 这个承诺在循环的其余部分完成之前就已经完成了。 如果我将履行(videoList)从if语句的第一部分中删除,那么这个承诺根本就没有实现。 我一直在做很多的阅读,看起来Bluebird可能是正确的路,但是这是我的代码中唯一不能正常工作的部分,我不知道是否有必要,如果是这样,我很困惑如何在这种情况下实现它。 任何帮助将不胜感激! Videos.prototype.getVideoList […]

从Node.js中的Promise(Bluebird)返回值

我正在学习Node.js,正在查看Promise模块。 我很新,所以请用不好的代码约定和东西。 我正在尝试使用restify构buildREST客户端API。 我附上了我的客户代码如下: 这是我的客户: // local functions function loadResult(err, req, res, obj) { //console.log(err, req, res, obj); var result = { 'err': err, 'text': obj }; console.log(result); return result; } function getClient() { if (client) { return client; } else { client = restify.createJsonClient(options); return client; } }; function RestClient(headers) { if (headers) { […]

属性“catch”在types'Promise <void>'上不存在

我正在用打字机使用mongoose和蓝鸟。 Mongoose设置为返回Bluebird诺言,但是我不知道如何“告诉”TypeScript。 例如,我有一个Message Mongoose模型,如果我尝试执行以下操作: new Message(messageContent) .save() .then(() => {…}) .catch(next); TypeScript抱怨Property 'catch' does not exist on type 'Promise<void>'. 因为它认为.save() (或任何其他Mongoose方法返回Promise)会返回一个“常规”Promise(实际上没有.catch()方法),而不是蓝鸟许诺。 我怎样才能改变Mongoose方法的返回types,使TypeScript知道它返回一个蓝鸟的承诺?

我怎么知道哪些处理程序在承诺中抛出错误?

假设我有一个承诺如下: p.then(Task1) .then(Task2) .then(Task3) .catch(errorHandler); 当Task2遇到错误时,如何知道错误是从Task2中捕获的 ?