Tag: 承诺

那么在最后的承诺之间有什么区别呢?

我finally看到了蓝鸟的文档,但是我还是不太明白与then的差别。 要清楚:我确切地知道为什么then被catch后被调用。 我想让它在被捕之后被调用。 这是意图。 我的问题是:如果我希望代码总是被执行,而不pipepromise的状态如何, then vs finally的区别是什么呢? 我build立了这个testing: var Promise = require("bluebird"); function test1 () { console.log("RESOLVE + THEN + CATCH + THEN"); return new Promise((resolve, reject) => resolve()) .then(() => console.log("then")) .catch(err => console.log("error:", err.message)) .then(() => console.log("end")); } function test2 () { console.log("REJECT + THEN + CATCH + THEN"); return new Promise((resolve, […]

防止吞咽错误的ES6承诺(不使用.catch)

我不想为每个使用的承诺input.catch。 没有做这个承诺所造成的错误是极其无益的。 纯粹为了这个目的而使用像蓝鸟这样的整个库让我感到不舒服。

如何使用诺言来做串行任务?

所以我有4个任务: getStatus() , updateStatus(A) , getTask() , updateTask() ,它应该以这种方式执行: getStatus(function(status) { // A updateStatus(status, function(status) { // B getTask(function(task) { // C updateTask(task, function(task) { // D }) }) }) }) 所以为了避免callback地狱,我用诺言,现在所有这四个任务都返回一个诺言,然后我改变了这个方式 getStatus().then(function(status) { // A updateStatus(status).then(function(status) { // B getTask().then(function(task) { // C updateTask(task).then(function(task) { //D }) }) }) }) 正如你所看到的,它仍然是then hell , 我对Promise做错了什么?

Promise Chain Breaks w / .all()

我是相当新的承诺,并认为我处理了事情,但显然我没有。 下面的代码是为了获取X个表名(getTableName()),将它们传递给getData()并遍历每个表来获取数据。 然后,我调用Promise.all()来解决这些问题,并尝试将数据传递给链中的下一个链接(createFile()),但Promise.all()在移至createFile()后parsing。 这是“反模式”回来咬我的例子吗? 如果是这样的话,你们有没有人可以build议我应该如何重组,以便我能够完成我所要做的事情? 谢谢! exports.getRawDataForExport = function(data) { return new Promise(function(resolve, reject) { var getTableName = function() { return knex('monitored_parameter') .where('device_id', data.device_id) .whereIn('internal_name', data.param) .select() .then(function(rows) { if(rows) { var runningResult = {}; for(var i = 0; i < rows.length; i++) { var tbl = {"table" : 'monitored_parameter_data_' + rows[i].id, "param" : rows[i].display_name}; […]

如何避免使用setTimeout来等待Promise解决?

我有一个subreddit我想parsing所有日常线程的意见。 要做到这一点,我必须得到线程ID。 我使用snoowrap作为api包装。 我正在困难地考虑节点的asynchronous性。 当我打电话给subreddit.search({query: 'Daily General Discussion – ' + date}) ,我得到一个承诺。 然后我解决承诺获得线程ID并推送到一个新的数组(我试着用arr[i] = a[0].id保存值,但只有最后的结果被存储在我的数组, Promise.resolve在我的for循环之后被调用)。 如何在Promise解决之前停止执行其余的代码? 使用setTimeout似乎效率低下,不可靠,因为parsing时间可能比我的setTimeout时间长。 下面的代码工作,我只是想避免使用setTimeout。 const subreddit = reddit.getSubreddit('subreddit') let numberOfDaysBack = 50; let arrIds = new Array(0); for (var i = 0; i < numberOfDaysBack; i++) { let date = moment().subtract(0+i, 'days').format('MMMM D, YYYY') let dailyThread = subreddit.search({query: 'Daily […]

如何确定在Node.js中导致UnhandledPromiseRejectionWarning的原因?

我已经在asynchronous/等待库的基础上构build了Node.js应用程序,并且在大多数情况下工作得很好。 我遇到的唯一麻烦是,只要承诺没有完成,我就会得到以下错误的一些变化: (node:83333) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property '_id' of null 我无意中能够find违规的承诺,但有时需要进行相当多的debugging。 有没有一种方法可以用来检查未处理的承诺的行号? 会救我很大的头痛。

如何处理需要两个asynchronous方法的node / express的请求

我正在学习节点。 我有一个web应用程序,通过比特币包与bitcoind连接,通过knex与PostgreSQL 连接 。 我需要从每个模块获取一些数据,然后将其全部传递给我的视图进行渲染。 我的代码看起来像这样到目前为止: exports.index = function(req, res){ var testnet=''; bitcoin.getInfo(function(e, info){ if(e){ return console.log(e);} if(info.testnet){ testnet='bitcoin RPC is testnet'; }else{ testnet='nope.. you must be crazy'; } var c=knex('config').select().then(function(k){ res.render('index', { title: k[0].site_name, testnet: testnet }); }); }); }; 这样做的结构方式,首先等待比特币回复,然后将请求发送到PostgreSQL,然后等待一段时间回复。 这两个等待期可能会同时发生。 但是,我不知道如何做与承诺/callback在Javascript中。 我怎样才能pipe理这种asynchronous发生,而不是连续发生?

在parsing之前返回的延迟对象

我正在使用带有Node js的库。 我创build一个被caching的对象,把这个parsing放到一个封装的Mongoose findOne()函数中,然后在外面返回promise。 但似乎我的承诺总是在数据被检索之前返回。 User.prototype.getProfile = function(criteria) { var deferred = when.defer(); var options = { criteria: criteria, select: 'name id email' }; this.User.load(options, function(err, data) { if (data) { this.name = data.name; this.email = data.email; this.id = data.id; } else { return false; } console.log(data); deferred.resolve(); }); console.log('returning promise'); return deferred.promise; }; 呼叫者 […]

有条件的承诺(蓝鸟)

我想做的事 getFoo() .then(doA) .then(doB) .if(ifC, doC) .else(doElse) 我认为代码很明显? 无论如何: 当一个特定的条件(也是一个承诺)给出时,我想要做一个承诺。 我可能可以做类似的事情 getFoo() .then(doA) .then(doB) .then(function(){ ifC().then(function(res){ if(res) return doC(); else return doElse(); }); 但是,这感觉相当详细。 我使用蓝鸟作为承诺库。 但是我猜如果有这样的事情,在任何承诺库里都是一样的。

Nodejs没有执行asynchronous的promise函数

我写了一个小例子js来学习如何使用Promises。 我预计脚本开始,并立即输出“开始”和几秒钟后“45”。 但是,无论如何,脚本开始时没有任何输出,在退出之前,两行都被打印出来。 我误解了承诺如何工作或有缓冲的问题? ;(function(main, undefined) { "use strict"; main.test = function() { return new Promise(function(resolve, reject) { for(var i = 0; i < 999999999; ++i); resolve(45); }); }; })(global); global.test().then(function(r) { console.log(r); }); console.log("start"); $ node -v v0.12.6