Tag: 承诺

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

计算多个调用的asynchronous函数的执行次数

如果工作函数正在执行一些操作,比如从队列中选取一个项目并执行一些操作。 我将如何获得doWorkfunction的执行时间。 我想知道平均需要多less时间来完成工作。 示例代码 function doWork () { return Promise.resolve({first: 'Tony', last: 'Starks'}) } async function wrapper () { console.time('wrapper') const response = await doWork() console.timeEnd('wrapper') return response } Promise.all([ wrapper(), wrapper(), wrapper() ]).then((result) => console.info(result)) 产量 wrapper: 0.388ms [ { first: 'Tony', last: 'Starks' }, { first: 'Tony', last: 'Starks' }, { first: 'Tony', […]

产生多个承诺

我不确定这是可能的,但这是我想要做的。 我有一个数据库的调用返回一个承诺。 在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 + ' […]

从一个承诺的价值传递到下一个

有点新的JavaScript。 一直在处理承诺,但遇到了一个问题,我不知道如何处理。 我怎样才能将价值传递给下一个承诺的决心? 这是我的代码 bot.on('ask.add_account_password', (msg) => { let username = users[msg.from.id].username; let password = msg.text; var accounts = require('./inc/account.js'); accounts.login_account(username,password).then(function(data){ var account = data.params; console.log(account); return accounts.store(msg.from.id,username,password,account.followerCount); }).then(function(data){ let caption = "Your account "+account.username+"("+account.fullName+")has been added\n"; return bot.sendPhoto(msg.from.id, account.picture, {caption:caption}); }) .catch(function(error){ console.log(error); add_account(msg,error.name); }); }); 在我创build标题variables的行上,我试图访问该块中创build的帐户对象(var account = data.params)之前,但我得到一个参考错误,说它没有定义。 现在我可以很简单地通过将整个对象发送到accounts.store函数并在完成时parsing对象来绕过这个问题,但对于一个更大的问题,这似乎是一个肮脏的解决方法。 有没有更干净的方法来做到这一点?

防止“未处理的承诺拒绝”错误

在我的服务器应用程序中,当用户没有对端点的权限时,我想返回一个“禁止”值。 为此,我创build了一个拒绝重用的承诺: export const forbidden = Promise.reject(new Error('FORBIDDEN')) 然后在应用程序的其他地方: import {forbidden} from './utils' … resolve: (root, {post}, {db, isCollab}) => { if (!isCollab) return forbidden return db.posts.set(post) }, 但是,当我启动我的应用程序时,我收到警告 (node:71620) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: FORBIDDEN (node:71620) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not […]

未经处理拒绝承诺

我试图使用蓝鸟的Promise.each()进行多个数据库查询。 我卡住的部分是我无法处理所有的拒绝(如果多个承诺失败)。 如果我使用Promise.all()做同样的事情,它会正常工作(因为在Promise.all()中,如果1 promise失败,结果也会被拒绝)。 我的问题是:我应该如何处理Promise.each()中的拒绝? function foo(bar){ return new Promise(resolve, reject){ var query = "elect count(*) from students Where 1=1";//DELIBRATE MISTAKE connection.query(query, function(err, result){ if(err){reject(err)}resolve(result); }) } } function api(req, res){ var tasks = []; for(var i = 0; i < 10; i++){ tasks.push(foo(bar)); } Promise.each(tasks).catch(err=>{return err;}); res.send('message') } 响应: Unhandled rejection Error: ER_PARSE_ERROR

打破承诺链(多个快乐stream和单链)

这个问题之前已经被问过了,但是我并不满意于拒绝和处理破坏快乐stream程的解决scheme。 我想知道我们是否可以在线性的承诺链中获得多个快乐stream而不拒绝(除了错误)。 这是我的代码示例: const goStraight = (steps) => { return new Promise ((resolve, reject) => { resolve(steps+2); }); }; const turnLeft = (steps) => { return new Promise ((resolve, reject) => { resolve(++steps); }); }; const turnRight = (steps) => { return new Promise ((resolve, reject) => { resolve(++steps); }); }; goStraight(0) .then((total_steps_taken) => { […]

正确的方式与JS使用承诺链

任务如下。 我需要使用fs2库中的rmdir来删除文件夹和内容。 它返回承诺对象。 完成后我需要再次创build文件夹。 而且函数还应该返回承诺,以便进一步链接。 我现在的代码是这样的: function clearOutputDir() { var def = deferred(); var def2 = deferred(); if (fs.existsSync(outputFolder)) { def.resolve(fs2.rmdir(outputFolder, {recursive: true, force: true})); } else { def.resolve(); } def2.resolve(def.promise.then(function () { return deferred.promisify(fs.mkdir)(outputFolder); })); return def2.promise; } 看起来像是有用的,但是它很糟糕。 如果没有def和def2,它可以做得更简单吗?

在使用0MQ进行经纪商与客户之间的沟通中做出承诺

我正在试图发展一个代理人,作为使用0MQ的一些工人和客户之间的沟通的代理。 没有承诺的任务相对比较简单,但是由于我对承诺的使用没有经验,所以我无法理解如何在这个例子中实现承诺。 经纪人代码: //Broker that serves as proxy for workers and clients var zmq = require('zmq'); var frontend = zmq.socket('router'); var backend = zmq.socket('router'); var Q = require('q'); frontend.bindSync('tcp://*:8001'); backend.bindSync('tcp://*:8002'); var frontendOn = Q.nbind(frontend.on, frontend); var backendOn = Q.nbind(backend.on, backend); var requestFrontend = frontendOn('message').then(function(){ console.log("Message received"); }); var requestBackend = backendOn('message').then(responseBackend); … 客户代码: //Client program […]

丢失variables范围

所以,一旦我解决了我之前遇到的问题,我试图在login时从数据库中获取玩家帐户的X,Y坐标(所以它们不是放在1,1上,而是放在最后一个跟踪的坐标上) 经过一番debugging,我来到这个: var x; //note I also tried to define these directly above the getX/Y() and it didn't work var y; return con.getConnectionAsync().then(function(connection) { return connection.queryAsync('SELECT password,id FROM player WHERE name='+mysql.escape(req.body.user)) .spread(function(rows, fields) { if (hash.verify(req.body.pass,rows[0].password)) { req.session.loggedIn = true; req.session.user = rows[0].id; getX(rows[0].id,con,mysql).then(function(data) { x = data; }); getY(rows[0].id,con,mysql).then(function(data) { y = data; }); […]