Articles of 承诺

Node.js处理来自链接的promise的响应

我有3个function,每个function都返回一个承诺。 如何将每个承诺的响应分配给定义的对象? 这是我的代码: const runResponse = { webAudits: [], webJourneys: [], appJourneys: [] }; webAuditsFailures(req) .then( appJourneysFailures(req) ) .then( webJourneysFailures(req) ).then( res.status(201).json({ reports: runResponse }) ); 这是我试过的: webAuditsFailures(req) .then( (response) => { runResponse.webAudits = response }, appJourneysFailures(req) ) .then( (response) => { runResponse.appJourneys = response }, webJourneysFailures(req) ).then( (response) => { runResponse.webJourneys = response }, […]

Node.Js保证redirect不起作用

我有一个设置页面,您可以插入和删除一些filter。 对于删除请求,我使用了这个: $('#delete-filter').click(function (e) { var filtername = $('#filter-list').val(); var filterCount = $('#filter-list option').length; var retVal = confirm("Are you sure to delete this filter?"); if( retVal == true ){ $.ajax({ url: "/settings?filtername=" + filtername, method: 'DELETE', dataType: "json", success: function (result) { } }); } else{ return false; } }); 这是我的路线为这个页面: router.delete('/settings', ensureAuthenticated, function (req, […]

完成一个承诺,在开始下一个,在一个长长的名单

我最近发现了JavaScript的承诺。 广告的好处是干净的嵌套链接然后从句。 我的代码按预期工作,但嵌套增长就像我使用callback时一样丑陋。 有没有更好的方法来使用链接然后删除所有这些嵌套? 注意我需要在任务n + 1中的任何事情可以开始之前完成任务n。 非常简单的固定例子 'use strict'; function P1() { return new Promise((resolve) => { console.log("starting 1") setTimeout(() => { console.log("done 1") resolve(); }, 100) }) } function P2() { return new Promise((resolve) => { console.log("must start 2 only after 1 is done") setTimeout(() => { console.log("done 2") resolve(); }, 50) }) […]

ReferenceError:parsing没有定义

我有一个函数来调用谷歌的语音API。 看起来一切都很好,但我找不到为什么它给了我错误。 我初学者与节点和承诺,所以不知道为什么会出现此错误。 ReferenceError:parsing没有在index.js:57处定义 问题出在这部分代码中: return speech .longRunningRecognize(responses) .then(function(results) { var operation = responses[0]; console.log("Operation: ", operation); return operation.promise(); }) .then(function(responses) { resolve(responses[0]); console.log("Result: ", JSON.stringify(responses[0])); }) 凡诺言 operation.promise()(第57行) 无法解决。 它想要解决这个承诺,但是看起来它找不到解决的function。 谷歌的API是这样工作的: 首先你要做一个API调用来上传你的数据并开始这个过程。 这给你一个操作名称。 结果准备就绪后,应该使用这个名字来获得结果(最多只需要30秒) 我有感觉,所有的工作,呼吁,反应回来。 代码等待,然后它想解决,但它不能… 我的代码是这样的(它是一个云function) exports.transcribeAudio = functions.storage.object().onChange(event => { const object = event.data; const filePath = object.name; const fileName = filePath.split("/").pop(); […]

正确传递参数给setTimeout

我正在研究一个Node.js项目,并且我正在用一个setTimeout函数来封装一个Promise函数。 我原来的Promisefunction: 我想在setTimeout()调用中包装这个函数,但是在Promise对象中传递时遇到了问题。 我需要在setTimeout()函数内部提供的Promise对象和数据对象,但是当我将它们传递给setTimeout()作为参数时,我仍然得到以下错误: TypeError:无法读取未定义的属性'then' 我的代码: return Promise.props(data).then(function (data) { data.companies = data.order && data.order.companies; if (!data.companies) { data.companies = {}; data.companies[data.company.id] = data.company; } if (data.order) { if (data.order.contactentry) { data.order.pointofcontact = data.order.contactentry + ' ' + phone(data.order.contactentryphone); } else if (data.order.borrowername) { data.order.pointofcontact = data.order.borrowername + ' ' + phone(data.order.borrowerphone); } else if […]

如何同步运行嵌套的asynchronous方法?

如何将这个例程封装在一个Promise中,这样我才能解决所有的数据? var accounts = []; getAccounts(userId, accs => { accs.forEach(acc => { getAccountTx(acc.id, tx => { accounts.push({ 'id': acc.id, 'tx': tx }); }); }) }); 编辑:任何问题,如果我这样做呢? function getAccountsAllAtOnce() { var accounts = []; var required = 0; var done = 0; getAccounts(userId, accs => { required = accs.length; accs.forEach(acc => { getAccountTx(acc.id, tx => { […]

承诺超时后停止执行

我一直在使用Q模块来实现我正在进行的一个项目的承诺。 我正在使用静态方法Q.fncall()创build一个node.js样式函数(基于callbackerr,结果)的承诺。 问题是我需要在一定的时间内停止执行这个函数,所以我使用了Q模块的“超时”function。 所以,经过了一段时间后,done函数的“错误”callback就会执行,让我来处理超时,但是函数本身不断的执行,直到它到达最后的callback,即使处理程序不再监听。 问题是:是否有任何方法来执行超时后停止执行一个函数? 我知道我可以在超时处理程序上设置一个variables,并在超时结束的时候继续检查函数,但是我希望能有一个更清晰的方法来实现。 代码如下: Q.nfcall(test1, id) .timeout(1000) .done( function (value) { console.log("SUCCESS: " + value); }, function (reason) { console.log("ERROR " + reason); }, function (progress) { console.log("PROGRESS " + progress); } ); 和test1函数: function test1(id,callback){ db_rw_pool.query("SELECT * FROM table WHERE id=?",[id], function(err,result) { if(err){ callback(err,null); } else { setTimeout(function(){ console.log("I DON'T […]

Q承诺相当于BlueBird Promise.Bind()

几个问题,Q有一个bindB bind()方法在BlueBird API和这个幻灯片JavaScript承诺〜Kerrick长 ? 它是核心承诺/ A +规范的一部分吗? 如果没有,是否有一个polyfill或解决方法?

Node.js的承诺 – 不应该等到.then完成()?

我很困惑这种asynchronous行为。 当token为false , refreshToken()函数会运行,但createTokenFile()不会等待它完成。 不应该var tokenDate = new Date(token.expires); 等待callApiToken().then(function() {refreshToken();})完成之前执行? function createTokenFile() { console.log("No token-file.json file found. " .red + "Please complete for a new one." .red); return callApiToken().then(function() { refreshToken(); }); } function checkExpiredToken() { return new Promise(function(resolve, reject) { if (!token) { refreshToken(); } var tokenDate = new Date(token.expires); var utc = […]

如何处理then()函数链接JavaScript承诺时的条件?

我正在与承诺,并需要弄清楚如何正确地链接他们,我知道如果它的工作如果承诺要么成功的决心和拒绝错误,但如果可以有一个错误状态后,一个承诺解决? 这是我的scenerio function getUser(userId){…} // resolves if user exist and (activated or not) returning user // rejects to error1: user does not exist function doTask(user){…} // resolves on successful completion of the task // rejects error3: could not do Task 如果我想做另一个承诺做用户id的任务,但只有当用户被激活 // function doTaskWithUserId(userId) // reject to error1; user does not exist // reject to […]