Tag: 蓝鸟

如何处理使用蓝鸟的Mongoose返回的诺言?

我有一个Account架构,用Mongoose定义,我已经设置了蓝鸟的承诺: var mongoose = require('mongoose'); mongoose.Promise = require('bluebird'); 我为这样的模式devise了一个模型方法: accountSchema.methods.validPassword = function(password) { return bcrypt.compareSync(password, this.password); } 所以我得到了一个方法,试图find一个用户,并检查密码匹配: function login (email,password) { return Account.findOne({email: email}).then(function (user) { console.log(user); user["match"] = user.validPassword(password); console.log(user); return user.validPassword(password); }); } 奇怪的是,第二个console.log不会显示对象的任何match属性。 在这里,我的意图是返回一个查找用户和检查密码匹配的承诺 ,但是当我调用login时: login("email","password").then(function(user){…}) 用户没有匹配属性,我怎么能实现它?

nodeJSdevise模式打破了asynchronousstream水或承诺。然后,然后

我有4个asynchronous函数在瀑布式我的节点应用程序中执行。 async.waterfall会把它整理一下,但是根据第一个函数的结果,我要么是错误的,要么进行瀑布或者是爆发到完成的function。 目前没有办法做到这一点(除了错误,成功的价值,只是闻起来不好)。 我正在看使用诺言(蓝鸟),但是,我再也看不到有什么办法可以突破,如果我没有在那个时候再给出另外一个诺言,那么下面的所有内容都会被执行。参数。 有其他的模式/工具可以帮助吗? 或者我在想这个,只是调用第一个方法,然后根据结果运行async.waterfall,或返回结果! 假设我有4个函数可以调用,a,b,c,d ….. async.waterfall([ function(cb) { a("some data", cb) }, function(data, cb) { if(data) { // HERE we want to skip the remaining waterfall a go to the final func } else { b("some data", cb); } }, c, d ], function(err, data) { //do something }); 或者如果他们是承诺… a("some data") […]

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 […]

使用request-promise嵌套asynchronous请求

我正在使用Visual Studio Online API并试图通过存储库获取分支统计信息。 要做到这一点,我嵌套我的asynchronous调用。 我正在使用请求承诺来解决我的GET请求。 我遇到的问题是在将所有分支添加到顶级模型后,如何返回模型: 当我console.log结果我明显得到[]因为它没有解决分支请求。 var model = []; rp(options) .then(function(repos) { repos.value.forEach(function(repository) { var repo = { id: repository.id, name: repository.name, branches: [] }; var branchOptions = options; branchOptions.url = config.endPoints.base + config.endPoints.branches(repository.id); rp(branchOptions) .then(function(branches) { branches.value.forEach(function(branch) { repo.branches.push({ name: branch.name, behind: branch.behindCount, ahead: branch.aheadCount }); }) }).then(function() { model.push(repo); }); […]

承诺所有地图更新数组

我正在使用蓝鸟和mongoose,我得到了一个前一个函数的用户数组。 我想更新users设置属性hasCar true或false从我的数组中的每个用户。 function findCars(users) { return Promise.all(users.map((user) => { return Car.count({ _creator: new ObjectId(req.user), userId: user._id }) .then((car) => { user.hasCar = !!car; return user; }); })) .then(console.log); } 问题是,在console.log中,这些用户没有设置hasCar属性。 我尝试了不同的方式,但没有成功。

使用映射并将对象传递给后续的函数调用

我有这样的代码: var downloadFiles = function () { console.log('downloading files'); aFtpClient. listAsync(). then(processListing). map(function (object) { return processItem(object); }). then(downloadItem). catch (TypeError, function (e) { console.dir('arse' + e); }). catch (Promise.RejectionError, function (e) { console.error("unable to read file, because: ", e.message); }); console.log('after downloading files'); }; processListing返回一个包含source和destination属性的对象数组。 我用map来处理数组并调用processItem 。 有没有办法将映射的对象传递给downloadItem ?

使用蓝鸟承诺

我有我的人的function,在它内部调用这样的承诺函数 var myPeople = function(){ var go; return new Promise (function(resolve){ User .getPeople() .then(function(allPeople){ go = allPeople; //console.log(go) resolve(go); }) }) return go; } 如果我login我的去块内我得到我的对象,但我不能得到它返回此对象..

从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) { […]

有没有替代弃用的deferred.callback?

问题 我发现以下相当详细的模式通常出现在我的代码中,当我包含给我很难promisify对象的库: var object = crummyLibrary.create(); return new Promise(function(resolve, reject){ object.method('foo', function(err, bar){ if(err){ reject(err); }else{ resolve(bar); } }); }); 对于Promise.defer()这个过去并不那么冗长: var deferred = Promise.defer(); object.method('foo', deferred.callback); return deferred.promise; 但现在已经废弃了(出于很好的理由),但是我还没有find这个模式的一个很好的替代品。 我知道有这样的: return Promise.promisify(object.method, object)('foo'); 但是,由于context / receiver的传递,它感觉很尴尬。 我在找什么 我希望能取代旧的deferred.callback ,也许是沿着以下的路线: var promise = new Promise; object.method('foo', promise.callback); return promise; 或者可能: return new Promise(function(resolve, reject, callback){ […]

Promisify prompt.js

最初问GitHub 我正在努力promisify prompt.js。 谁能说我做错了什么? var prompt = require('prompt'); var Promise = require("bluebird"); Promise.promisifyAll(prompt); prompt.start().then(function() { console.log("test"); return true; }); prompt.get(['message'], function(err, result) { if (err) { return onErr(err); } console.log('Write a push Message repositoryName:'); console.log(' Message: ' + result.message); return result; }).then(function(result) { console.log("hello"); return result; });