Tag: es6 promise

收集承诺价值“function上”

说我有这个: function getAllPromises(key: string, val: any): Promise { const subDeps = someHash[key]; const acc = {}; // accumulated value return subDeps.reduce(function (p, k) { return p.then(v => getAllPromises(k, v)).then(function (v) { acc[k] = v; return acc; }); }, Promise.resolve(val)); } 有没有办法避免必须声明一个单独的variables: const acc = {}; // accumulated value 并以某种方式从承诺链返回呢? 最终,accvariables是从promise链得到的结果,但是我想知道如果我能够以某种方式避免在链外面声明它。 编辑:像这样的种子数据如下所示: { 'one': [function (v) […]

为什么这两种asynchronous调用方式(一种使用承诺,另一种是生成器)产生相同的结果?

我有一个小节点脚本,使用Node-fetch(Node.js运行时的window.fetch兼容API)从Github中获取用户。 然后我console.log用户,如下所示,使用从提取返回的承诺: import fetch from 'node-fetch'; import "babel-polyfill"; const fetchUsers = lastReceivedId => fetch(`https://api.github.com/users?since=${lastReceivedId}`); console.log("Promise-based:"); fetchUsers(0) .then(response => response.json()) .then(response => console.log(response)) .catch(err => console.error(err)); 以上作品完美。 我现在想用一个发电机和承诺一起做同样的事情: import fetch from 'node-fetch'; import "babel-polyfill"; const fetchUsers = lastReceivedId => fetch(`https://api.github.com/users?since=${lastReceivedId}`); function* main() { try { const res = yield fetchUsers(0); console.log("Response in generator is ", res); […]

Nodejs承诺所有不按预期运行

我有一系列我在testCard链接的testCard 。 这种方法需要一个stripe卡号码,从条带中获取令牌,然后与试图使用该卡执行购买的第三方API通信。 我需要通过循环访问一系列卡号来运行testCard 。 要做到这一点,我有一个controller对象的方法testAllCards采用数组的数组。 该数组存储在configuration文件中。 然后,我使用node cli.js testAllCards从命令行运行代码。 但是,当我运行它,我得到了所有大多数承诺已经解决之前testAllCards has been run 。 我显然在这里失去了一些东西,但似乎无法弄清楚它是什么。 cli.js const testAllCards = () => { return controller.testAllCards(config.get('CARD_NUMBERS')) .then((obj) => { console.log('testAllCards has been run'); }) .catch((e) => { console.log('testCards has been run with an error!'); const _err = new ErrHandler(e, eTopicName, eSnsSubject); _err.handle() .then(() => { console.log('Error […]

产生多个承诺

我不确定这是可能的,但这是我想要做的。 我有一个数据库的调用返回一个承诺。 在then我想遍历的结果,并产生一个新的承诺每行进行HTTP请求。 它执行所有的HTTP请求,但是我不能为每个请求链接一个。 以下是我所尝试的: 尝试1 userDao.getBitbucketInfoForUser(token.id, cohortId) // Get Bitbucket information and make clones .then((teams) => { for(const team of teams) { console.log('Clone repo ' + sourceRepo + ' for Team-' + team.teamNumber); return makeFork(gitInfo, sourceRepo, team); } }) .then((result) => { const team = result.team; console.log('Wait for Team ' + team + ' […]

捕获被拒绝的承诺后,处理提出拒绝警告

使用Node v8.1.4运行以下代码: testPromise((err) => { if (err) throw err; }); function testPromise(callback) { Promise.reject(new Error('error!')) .catch((err) => { console.log('caught'); callback(err); }); } 返回以下内容: caught (node:72361) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: test (node:72361) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js […]

Postgres承诺多个查询 – nodejs

阅读https://stackoverflow.com/a/14797359/4158593之后 :关于nodejs单线程,并且它需要asynchronous函数的第一个参数,处理它,然后使用callback来响应,当一切准备就绪。 我困惑的是,如果我有多个查询需要一次性完成,并告诉nodeJS通过将其添加到队列中来阻止其他请求。 为了做到这一点,我意识到我需要在另一个callback包装我的查询。 承诺做得很好。 const psqlClient = psqlPool.connect(); return psqlClient.query(`SELECT username FROM usernames WHERE username=$1`, ['me']) .then((data) => { if(!data.rows[0].username) { psqlClient.query(`INSERT INTO usernames (username) VALUES ('me')`); } else { … } }); 在注册过程中使用此代码来检查在插入之前是否未使用用户名。 因此,nodejs将其他请求放入队列非常重要,并确保同时select和insert 。 由于此代码可能允许同时发送同一用户名的用户select已被使用的用户名,因此将插入两个用户名。 问题 上面的代码是否一次执行查询? 如果1是正确的,如果我要改变这样的代码 const psqlClient = psqlPool.connect(); return psqlClient.query(`SELECT username FROM usernames WHERE username=$1`, ['me'], function(err, reply) […]

通过ES6承诺来自动处理前提条件

我是ES6诺言新手,一直在做研究。 我在NodeJS中执行了一些执行一些asynchronous工作的代码,但是我有一些必须首先检查的前提条件。 我正在寻求处理这个问题的惯用的最佳做法 (如果存在的话)以及一些推理。 我希望能够获得谅解,因为我已经有了工作代码。 考虑下面的虚构片段: function doStuff(data, cb) { if (!data) { return cb(new Error("Don't be an idiot")); } externalLibrary.doSomethingCallbackAsync(data, cb); } 如果我把这个翻译成诺言,我看到两个select。 选项1 ,我可以在承诺中包含前提条件。 function doStuff(data){ return new Promise((resolve, reject) => { if (!data) { return reject(new Error("Don't be an idiot")); } externalLibrary.doSomethingCallbackAsync(data, function(err, newData) { if (err) { return reject(err); } return […]

承诺传播中间对象(NodeJS + MongoDB)

我试图在节点4.x中使用带有Promises的MongoDB 在这个例子中,我想: 连接到我的mongodb 然后用给定的键删除所有的东西 那么插入一条logging 那么closures连接 幸运的是,当你不给它一个callback时,这个mongodb客户吐出了许诺。 这是我想出来的。 const MongoClient = require('mongodb').MongoClient; const test = require('assert'); function insertDoc(doc, collName) { return MongoClient.connect('mongodb://localhost:27017/myDB') .then(db => { const col = db.collection(collName); return col.deleteMany({ 'Key': doc.key }) .then(() => col.insertOne(doc)) .then(result => test.equal(1, result.insertedCount)) .then(() => db.close); }); } 代码似乎工作,但嵌套的.then() “感觉”是错的。 任何想法如何做到这一点,使我可以使用.close()它时, db对象可以使用?

我必须履行我的JavaScript承诺吗?

在Node.js环境中,如果我这样做: var doNoResolve = true; function a() { return new Promise(resolve => { if (doNotResolve) { return } resolve(10); }); } a().then(() => { // I don't want this getting fired }); 在传入的请求,这是一个内存泄漏? 如果我使用一个普通的旧callback,如果我没有执行任何callback提供的东西,那么一切都会变好,但是这种感觉可能不是这样的……名字的承诺意味着这是错误的。 如果我必须在doNotResolve为true的情况下返回一个“假承诺”( return { then: () => {} } )在function a()而不是“真正的承诺” 特别的用例是一个同构的React.js应用程序,我不想让HTTP请求实际得到(但是我希望我的商店更新到一个导致加载图标出现的状态)。

Nodejs Promise.all()总是parsing

我对承诺是新的。 我正在尝试ping一些机器来检查它们是否处于活动状态。 我正在使用本地NodeJS承诺。 我的pingfunction: function ping(addr) { return new Promise(function(resolve, reject) { var args = ['-n', '1', '-w', '5000']; args.push(addr); var ls = cp.spawn('ping.exe', args); ls.on('error', function (e) { reject(Error('There was an error while executing the ping')); }); ls.on('exit', function (code) { if(code === 0) { resolve({host: addr}); } else { reject(Error(addr + " is […]