Articles of 承诺

级联的承诺

除了一个简单的承诺之外,任何事情都会让我感到困惑。 在这种情况下,我需要在N个对象上连续执行2个asynchronous调用。 首先,我需要从磁盘加载文件,然后将该file upload到邮件服务器。 我更喜欢一起做这两个动作,但是我已经通过首先完成所有的读取操作并将所有的上传次要做到了。 下面的代码工作,但我不禁认为它可以做得更好。 有一件事我不明白的是为什么when.all不拒绝。 我对文件的解释似乎意味着,如果其中一个承诺被拒绝,那么所有的人都会拒绝。 为了testing错误,我已经提出了较低的解决scheme。 没有错误的事情似乎工作正常,是有道理的。 mail_sendOne({ from: 'greg@', to: 'wilma@', subject: 'F&B data', attachments: [ {name: 'fred.html', path: '/fred.html'}, {name: 'barney.html', path: '/barney.html'} ] }) .done( function(res) { console.log(res) }, function(err) { console.log('error ', err); } ) function mail_sendOne(kwargs) { var d = when.defer(); var promises = [], uploadIDs = […]

如何用promise来asynchronous读取多个文件,然后继续

我刚刚承诺并使用rsvp实现。 我想asynchronous读取文件列表,然后只有在读取完所有文件后才能继续执行另一个任务。 我已经有了基本的结构来读取一个文件,并链接到下一个任务: var loadFile = function (path) { return new rsvp.Promise(function (resolve, reject) { fs.readFile (path, 'utf8', function (error, data) { if (error) { reject(error); } resolve(data); }); }); }; loadFile('src/index.txt').then(function (data) { console.log(data); return nextTask(data); }).then(function (output) { //do something with output }).catch(function (error) { console.log(error); }); 我想要做这样的事情: loadFile(['src/index.txt', 'src/extra.txt', 'src/another.txt']).then( … 我在文档中看到了承诺和承诺的 […]

与蓝鸟诺言使用ldapjs

我在这里发布类似的东西: 使用ldapjs的承诺 。 不幸的是,它仍然没有解决。 这次我尝试了蓝鸟,希望能得到一些好运。 // https://www.npmjs.com/package/ldapjs var Promise = require('bluebird'); var ldap = Promise.promisifyAll( require('ldapjs') ); var config = require('./config'); var print_r = require('print_r').print_r; var my_filter = "(&(objectCategory=person)(objectClass=user)" + "(cn=" + 'someone' + "))"; var ldap_username = config.ad.username; var ldap_password = config.ad.password; var ldap_url = config.ad.url; var ldap_dn_search = config.ad.dn_search; process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; ldap.Attribute.settings.guid_format […]

为什么'新Promise(…)'返回'undefined'?

看起来如果在用于创build一个promise的函数中没有引用'resolve'函数,那么promise就是未定义的。 在下面的代码中,… var count = 0; var limit = 3; // var thePromise; function timeout(_count) { thePromise.resolve(_count); } function sendMessage() { return new Promise(function(resolve, reject) { if (++count > limit) { reject({'Limit Exceeded': count}); } else { // With this line in place, the return value from this function // (expected to be a promise) […]

Nodejs与promise保持并行

我有这样的字典: {go: ['went', 'run'], love: ['passion', 'like']} 一个键的价值是它的同义词。 而'getSynonymWords(word)'是一个asynchronous函数,它返回一个promise,其值是与传递参数相对应的同义词列表。 我怎样才能循环通过对象recursion地获得另一个对象: {went: [], run: [], passion: [], like: []} 这是我的一段代码: function getRelatedWords(dict) { return new Promise(function(resolve) { var newDict = {}; for(var key in dict){ if (dict.hasOwnProperty(key)) { var synonyms = dict[key]; Promise.map(synonyms, function (synonym) { return getSynonymWords(synonym).then(function (synonyms) { newDict[synonym] = synonyms; return newDict; }); […]

蓝鸟 – 如何早日打破承诺链

PromiseA().then(function(dataA){ if (dataA.foo == "skip me") return ?? //break promise early – don't perform next then() else return PromiseB() }).then(function(dataB){ console.log(dataB) }).catch(function (e) { //Optimal solution will not cause this method to be invoked }) 如何修改上面的代码来提前中断(然后跳过第二个())?

如何使用async.js中的Promise进行编码?

背景 我通常会根据async.js编写node.js脚本来控制工作stream程。 有时我发现,基于async.js,代码似乎仍然是一个“地狱”。 如果使用多个嵌套,代码不可读,维护也非常棘手。 我在这里做了一些search,find了一些有用的资源 – 但其中大多数是一般的概念。 所以我会问一个问题。 对于任何反馈,我们都表示感谢。 我的通用代码 var request = require('request'); var async = require('async'); var array = [1, 2, 3, 4 ,5 ,6]; var url = 'http://www.google.com'; async.mapLimit(array, 3, function(number, callback) { request(url + number, function(error, res, body){ //do sth callback(); }); }, function(err){//do nothing}); 题 所以这次我想用Promisereplace这种代码。 能否请你帮忙? 如果问题重复,请提供一些有用的资源url。 谢谢!

用嵌套的承诺编写干净的代码

我正在写一个应用程序,与苹果进行validation以validation接收。 他们有一个沙箱和生产url,你可以张贴到。 在与苹果进行通信时,如果您收到21007状态,则表示您正在发布到制作url,而您应该在发布到沙盒上。 所以我写了一些代码来促进重试逻辑。 这里是我的代码的简化版本: var request = require('request') , Q = require('q') ; var postToService = function(data, url) { var deferred = Q.defer(); var options = { data: data, url: url }; request.post(options, function(err, response, body) { if (err) { deferred.reject(err); } else if (hasErrors(response)) { deferred.reject(response); } else { deferred.resolve(body); } }); return […]

在forEach循环中保证

在一个Node应用程序中,我需要以同步的方式迭代一些项目,但循环内的一些操作是asynchronous的。 我的代码现在看起来像这样: someAPIpromise().then((items) => { items.forEach((item) => { Promise.all[myPromiseA(item), myPromiseB(item)]).then(() => { doSomethingSynchronouslyThatTakesAWhile(); }); } } 当这个items是1的数组的时候,这会有奇效。但是,一旦有多个项目, promise.all()就会立刻为数组中的每个项目开始,而不用等待循环中的操作结束。 所有这一切…如何确保数组中的每个项目的整个操作同步运行(即使某些操作是asynchronous并返回一个承诺)? 非常感谢! ñ

Node.js承诺与mongoskin

我试图避免在进行mongodb查询时使用callback。 我使用mongoskin来打电话,如下所示: req.db.collection('users').find().toArray(function (err, doc) { res.json(doc); }); 在许多情况下,我需要做多个查询,所以我想使用Node.js承诺库,但我不知道如何将这些函数作为承诺包装。 我看到的大多数例子对于像readFile这样的事情来说都是微不足道的,我猜在这种情况下,我需要以某种方式包装到Array中。 这可以做,或将不得不由蒙古人实施的东西? 一个例子可以是任何一组callback,find / insert,find / find / insert,find / update: req.db.collection('users').find().toArray(function (err, doc) { if (doc) { req.db.collection('users').find().toArray(function (err, doc) { // etc… }); } else { // err } });