Tag: promise

MongDB找不到Promisetypes定义

我创build了一个新的项目,安装了几个types定义(来自DefinitelyTyped),并创build了一个基本的src/go.ts文件。 每当我编译代码时,我会得到大量的TS2304: Cannot find name 'Promise'错误! ./typings/mongodb/index.d.ts引用Promise ,但编译器似乎没有find。 请注意,我也安装了dt〜promise。 截图 (左侧的错误,安装的types定义和应用程序代码在右侧) typings.json内容: { "globalDependencies": { "dotenv": "registry:dt/dotenv#2.0.0+20160327131627", "express": "registry:dt/express#4.0.0+20160708185218", "express-serve-static-core": "registry:dt/express-serve-static-core#4.0.0+20160805091045", "mime": "registry:dt/mime#0.0.0+20160316155526", "mongodb": "registry:dt/mongodb#2.1.0+20160602142941", "mongoose": "registry:dt/mongoose#4.5.4+20160807120805", "mongoose-promise": "registry:dt/mongoose-promise#4.5.4+20160720003345", "node": "registry:dt/node#6.0.0+20160807145350", "promise": "registry:dt/promise#7.1.1+20160602154553", "serve-static": "registry:dt/serve-static#0.0.0+20160606155157" } } 有什么想法吗?

Q.js,promise,classes和“this”是什么意思?

我对Q诺言中的背景完全感到困惑。 我不认为这是特定的Q,而是所有的承诺一般。 this在课堂内的背景是什么? 这段代码使用TypeScript,现在一切都是静态的,因为我基本上没有做任何非静态的事情。 这段代码工作正常。 我试图添加一个private _config; 实例variables,并使用_getConfig方法在构造函数中设置_config 。 但是,当我在this._config方法中使用this._config时,它与_getConfig()方法返回的对象不是同一个对象。 (我在debugging模式下观察variables状态) 所以我猜this是在一个类里面,因为我调用Q promise的代码,没有类实例上下文。 我想知道使用promise是否是一个好主意,如果遇到上下文问题,代码将会变得更加难以理解和debugging。 我希望了解为什么,并作出select的结果。 我不想丢失类实例上下文,这太棘手了。 我害怕使用一种实际上使事情变得更加复杂的技术,我更喜欢回拨地狱 。 ///<reference path='./def/defLoader.d.ts'/> export class App { /** * Constructor. * Load the config. * @return {} */ private static _getConfig(){ if(typeof __config !== "undefined"){ return __config; }else{ require('./../../shared/lib/globals/services'); return configHelper.load('_serverConfig', require('./../../shared/config/_serverConfig.json').path.config, __dirname + '/../../'); } } /** […]

如何转换函数调用与两个callback承诺

我有这样的function: var f = function(options, successCallback, errorCallback) { … } 我想把它转换成承诺。 我目前的解决scheme是这样的 var deferred = Q.defer(); f(options, function (result) { deferred.resolve(result); }, function (err) { deferred.reject(err); } ); return deferred.promise; 我不能使用Q.fcall,因为它需要一个Node.js样式的callbackfunction(err, result) { … } 那么,有没有一种方法来改善我的代码使用Q API ?

使用promise的asynchronousrecursion

所以我试图把我的代码转移到“承诺世界”,并在许多地方,当我不得不与asynchronousfunction“循环” – 我只是用这种方式recursion function doRecursion(idx,callback){ if(idx < someArray.length){ doAsync(function(){ doRecursion(++idx,callback) }); }else{ callback('done!') } } doRecursion(0,function(msg){ //… }); 现在我正在努力把变化变成承诺的世界,而且我很困难 var Promise = require('bluebird') function doRecursion(idx){ return new Promise(function(resolve){ if(idx < someArray.length){ doAsync(function(){ //… doRecursion(++idx) // how do i call doRecusion here…. }); }else{ resolve('done!') } }); } doRecursion(0).then(function(msg){ //… }); 谢谢。

Q.js:如何重写Q.js中的asynchronous系列stream?

为了掌握Q.js ,我想在Q.js使用async.series来转换下面的代码。 基本上我创build一个文件夹,如果它不存在(使用mkdirp),将文件移动到备份文件夹,并将文件保存到主文件夹。 var async = require('async'); var fs = require('fs'); var path = require('path'); var sessiondId = new Date().getTime() % 2 == 0 ? new Date().getTime().toString() : '_1234'; var backupFolder = path.join(__dirname,sessiondId); var backupFullPath = path.join(backupFolder,'a.txt'); var fullPath = path.join(__dirname,'main','a.txt'); var mkdirp = require('mkdirp'); async.series({ createOrSkip: function(callback) { mkdirp(backupFolder, function (err, dir) { if(err) […]

Q.defer()和Promise()之间的区别

我试图理解为什么下面的代码与Q.defer()和Promise() 情况1 :当我使用Q.defer() getDocument(id) .then(function (response) { console.log('in first then') return 'from two'; }).then(function (response) { console.log(response) }); var getDocument=function(){ var b = Q.defer(); b.resolve('from getDocument'); // here will do some async operation..this is just an example return b.promise; } 输出: in first then undefined 案例2 :使用Promise() getDocument(id) .then(function (response) { console.log('in first then') return […]

Promises:是.done()总是执行,即使.catch()是?

我的承诺问题 我是Promises新手,我一直在阅读Q文档 ,它说: 当你到达一个承诺链的末尾,你应该返回最后的承诺或结束链。 我已经在我的代码中定义了一个Promise Q.Promise方法,使用以下console.log来注销一个执行跟踪: function foo(){ return Q.Promise(function(resolve, reject) { doSomething() .then(function() { console.log('1'); return doSomething1(); }) .then(function() { console.log('2'); return doSomething2(); }) .then(function() { console.log('3'); return doSomething3(); }) .catch(function(err) { console.log('catch!!'); reject(err); }) .done(function() { console.log('done!!'); resolve(); }); }); } 如果每个doSomethingN()正确执行,一切都按预期工作,我得到预期的轨迹: 1 2 3 done!! 但是 ,如果任何doSomethingN()失败: foo()可以正常工作,因为错误函数callback是发生reject(err)时运行的错误函数。 foo().then(function() { /* */ […]

理解node.js中recursion函数的承诺

我试图使用recursion调用从redis中获取数据,当成员返回null时停止并返回。 所以我的数据是这样添加的: SADD parents.<name> <parent1> <parent2> SADD parents.<parent1> <grandparent1> <grandparent2> … 最终的数据应该如下所示: [ { label: <name>, parents: [ { label: <parent1>, parents: [ {label: <grandparent1>}, {label: <grandparent2> }] }, { label: <parent2> } ] } ] 这里是我搞乱的代码(来自不同来源的拼凑在一起),但我不知道我在做什么。 不知道这个代码是否有用,我可能会偏离轨道。 var redis = require('node-redis'); var r_client = redis.createClient(); var Q = require('q'); function getFromRedis(nodeName){ var ret = […]

我如何使用事件和承诺来控制程序stream?

我有一个这样的class级: import net from 'net'; import {EventEmitter} from 'events'; import Promise from 'bluebird'; class MyClass extends EventEmitter { constructor(host = 'localhost', port = 10011) { super(EventEmitter); this.host = host; this.port = port; this.socket = null; this.connect(); } connect() { this.socket = net.connect(this.port, this.host); this.socket.on('connect', this.handle.bind(this)); } handle(data) { this.socket.on('data', data => { }); } send(data) […]

nodejs redis Q promise,如何使它工作?

我正在尝试从redis获取一些值,并将它们结合起来并最终发送。 但我不能使这些承诺工作。 这是从redis get简单的function client.get('user:1:id',function(err,data){ // here I have data which contains user ID }); client.get('user:1:username',function(err,data){ // here I have data which contains username }); 现在我想获得ID和username ,并发送给他们,但我不知道如何做到这一点。 我设法使它与callback工作,但它是非常混乱的结果,所以然后我试图将匿名函数包装到Q.fcall ,然后调用。然后.then看起来像这样 client.get('user:1:id',Q.fcall(function(err,data){ return data; }).then(function(val) { // do something })); 但是这让我错误了太多的论点被传递,我甚至不知道这是否会帮助我,即使它会工作。