Articles of 承诺

使用承诺顺序执行function

我想依次执行一些基于数组的asynchronous函数。 我以为这会做到这一点: var Promise = require("bluebird"); Promise.cast([1,2,3]).reduce(function(_,i){ console.log("Launching " + i); return Promise.delay(Math.floor(Math.random()*1000)).then(function(){ console.log("Executing " + i); }); },0); 但是我明白了 Launching 1 Launching 2 Launching 3 Executing 2 Executing 1 Executing 3 而不是所期望的结果 Launching 1 Executing 1 Launching 2 Executing 2 Launching 3 Executing 3 我怎样才能确保在这里完全顺序执行? 请注意,我知道如何做到这一点,没有承诺,我只对完全承诺的解决scheme感兴趣。

蓝鸟承诺绑定链

我使用蓝鸟承诺,并试图允许链调用,但使用.bind()似乎并不工作。 我正进入(状态: TypeError:sample.testFirst(…)。testSecond不是函数 第一种方法是正确调用,并启动承诺链,但我还没有能够得到实例绑定工作。 这是我的testing代码: var Promise = require('bluebird'); SampleObject = function() { this._ready = this.ready(); }; SampleObject.prototype.ready = function() { return new Promise(function(resolve) { resolve(); }).bind(this); } SampleObject.prototype.testFirst = function() { return this._ready.then(function() { console.log('test_first'); }); } SampleObject.prototype.testSecond = function() { return this._ready.then(function() { console.log('test_second'); }); } var sample = new SampleObject(); sample.testFirst().testSecond().then(function() { […]

Javascript运行asynchronous代码的每个项目的循环与承诺

我有一个函数,获取一个对象传入它的密钥和数据是一个数组。 我必须调用API来获取额外的信息,然后将其添加回到对象中,并返回整个对象。 我的第一个方法是不正确的,因为我试图从.then()传递数据,但这是错误的做法。 function asignChecklistItems(taskArray) { // get all the people's tasks passed in return new Promise(function(resolve, reject) { var promises = [] // Task Array: {"Person":[tasks,tasks,tasks]} for (var person in taskArray) { var individualTaskPerson = taskArray[person] // get the person's tasks for (var individualTask in individualTaskPerson) { // here we get each individual task […]

NodeJS与promise.catch和console.log的错误?

在运行下面的代码时,根据是否有console.log("fnError: ", fnError)注释掉了,我得到了不同的结果。 这对我来说似乎非常不利 如何在这个世界上打电话给console.log影响我的承诺? function run() { var fn = function(){ throw new Error("incorrect message"); }; // returns a promise that should fail with // an error object whose .message is "correct message" var promisifiedFn = function(){ return Promise.resolve() .then(fn) .catch((fnError) => { // commenting this out fixes things! // console.log("fnError: ", fnError); /////////////////////////////////////// […]

如何使用承诺的Socket.IO?

作为持续努力的一部分,我将目前的callback技术转变为使用blue-bird承诺库的承诺。 我想用Socket.IO来实现这个技巧。 我怎样才能使用Socket.IO承诺而不是callback? 有没有使用Socket.IO的标准方式? 任何官方解决scheme

Nodejs – 承诺,未处理的终止和内存泄漏

寻求有关使用promise的nodejs专家的帮助。 我有以下testing程序,其中我调用asynchronous“q”函数,只是抛出一个exception。 这个程序相当一致地泄漏内存; 但如果取消注释.done()调用,则泄漏消失。 为什么泄漏发生在承诺未终止(即没有完成()调用)? 我试图按照文档 ,但无法理解done()方法的解释。 在此先感谢您的帮助! 这是我的代码: (function() { var MAX_ITER_COUNT, Q, iterCount, maxMem, noop, qDoit, test; Q = require("q"); iterCount = 0; MAX_ITER_COUNT = 10 * 1000; maxMem = 0; noop = function() {}; qDoit = function() { var currentMem; currentMem = Math.round(process.memoryUsage().heapUsed / 1024 / 1024); if (currentMem > maxMem) { […]

如何修复bookshelfjs事务中的嵌套结构

我想在单个书架交易中更新多个数据库表。 我可以使用一些帮助重构我的代码。 我是新来的节点,并没有很好的理解承诺,但下面的嵌套结构不是很漂亮,我希望有一个更干净的方式。 任何帮助,将不胜感激。 function insertUser(user, cb) { bookshelf.transaction(function(t) { var key = user.key; Developer.forge({key: key}) .fetch({require: true, transacting: t}) .then(function(developerModel) { var devID = developerModel.get('id'); Address.forge(user.address) .save(null, {transacting: t}) .then(function(addressModel) { var addressID = addressModel.get('addressId'); Financial.forge(user.financial) .save(null, {transacting: t}) .then(function(financialModel) { var financialID = financialModel.get('financialId'); var userEntity = user.personal; userEntity.addressId = addressID; userEntity.developerId = […]

如何确保在stream完成处理后执行asynchronous代码?

我有一个stream,通过侦听data , error和end事件来处理,我调用一个函数来处理第一个stream中的每个data事件。 当然,处理数据的函数会调用其他callback函数,使得它是asynchronous的。 那么当stream中的数据被处理时,我该如何开始执行更多的代码呢? 在stream中收听end事件并不意味着asynchronousdata处理function已经完成。 当我执行下一个语句时,如何确保stream数据处理函数完成? 这里是一个例子: function updateAccountStream (accountStream, callThisOnlyAfterAllAccountsAreMigrated) { var self = this; var promises = []; accountStream .on('data', function (account) { migrateAccount.bind(self)(account, finishMigration); }) .on('error', function (err) { return console.log(err); }) .on('end', function () { console.log("Finished updating account stream (but finishMigration is still running!!!)"); callThisOnlyAfterAllAccountsAreMigrated() // finishMigration is still running! […]

带callback的链类方法?

在Node.js中,如何将类方法链接到一起,最好使用callback函数? 在我的PHP日子里,我通常会做这样的事情: class MyClass { function get() { // fetch some data from an API endpoint return this; } function set(property, value) { // Set the property to some value on the object return this; } function save() { // Save the data to database return this; } } $myObject = new MyClass(); $myObject->set('something','taco')->save(); 这种非常常见的面向对象方法允许您将方法连接在一起。 […]

正确的方法来堆栈选项承诺

用承诺收集来自数据库的所有数据的适当或最好的方法是什么,但使用本地Node承诺。 目标只是提出select什么: const allPromises = []; const selected = { sectionA: true, sectionB: false, sectionCIds: [ 1, 2, 4 ], }; if (selected.sectionA) { allPromises.push(getSectionADataFromDbPromise()); } if (selected.sectionB) { allPromises.push(getSectionBDataFromDbPromise()); } if (selected.sectionCIds.length > 0) { allPromises.push(selected.sectionCIds .map(getSectionCDataFromDbPromise) ); } Promise.all(allPromises) .then((allResults) => { if (selected.sectionA) { dataA = allResults[0]; } if (selected.sectionA) { dataB […]