Tag: 承诺

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

用Sails.js中的一个请求创build/更新多个logging

我想知道在一个请求中创build/更新多个logging的最佳做法是什么。 我知道我们可以使用Promise.all()来做到这一点。 但是如果我想告诉客户哪个logging成功了,哪个失败了呢? 例如,用户发布如下内容: { departmentId: 1, students: [ {name: 'John', studentId: 123}, {name: 'Mike', studentId: 124}, ] } 而我目前的解决scheme是: StudentController: var departmentId = req.param('departmentId'); var postStudents = req.param['students']; var department; var failedRecords = []; Department.findOne() .then(function (_department) { department = _department; var students = []; while (postStudents.length) { var student = postStudents.pop(); student.department = […]

运行蓝鸟承诺顺序,没有返回值?

这个问题已经以各种方式提出,但不是那么简单。 这个Promise.all将被重写,以便promise1在promise2之前完全运行? var promise1 = function() { .. lots of promise stuff }; var promise2 = function() { .. lots more promise stuff }; Promise.all([promise1, promise2]).then(function() { log.info("ran promise1 & promise2"); }); Promise.all并行运行promise1和promise2。

如何通过Bluebirds .map传输一些数据?

我使用Blubird和Sequelize(使用Blubird)。 假设我有一个类似于以下的代码: Feed.findAll() .map(function (feed) { // <—- this is what I'm interested in below // do some stuff here return some_promise_here; }) .map(function (whatever) { // What is the best way to access feed here? }) …. 我发现了一些暗示可能的解决办法的答复,但我不能完全明白这一点。 我曾尝试Promise.all() .spread() ,但我从来没有设法使其工作。