Tag: es6 promise

Node.js – 对promise.all()后的每个结果继续承诺链

我在承诺链中使用Promise.all() 。 Promise.all()中的每个promise都返回一个string。 即时通讯的问题是,Promise.all() 返回Promise对象到下一个承诺,我想继续对每个string承诺链。 下面是一个例子: …. return Promise.all(plugins); }) .then(function(response) { console.log(response) …. response如下所示: [ 'results from p1', 'results from p2' ] 有没有办法继续每个结果的承诺链,而不是继续使用包含所有结果的单个对象?

出口承诺链的快速路线方法的最佳途径?

我有一个正在被重构使用ES6承诺避免callback地狱的API路线。 在成功转换为承诺链后,我想将我的.then()函数导出到单独的文件以保持清晰和清晰。 路线文件: 函数文件: 这工作正常。 然而,我想要做的是将在类的constructor()函数中声明的函数移动到独立的方法,它可以引用由构造函数实例化的值。 这样一切都更好。 但是,当我这样做时,我遇到了范围问题 – this是没有定义,等等。这样做的正确方法是什么? ES6适合在这里使用,还是应该使用其他的结构? 原始代码: 路线… .post((req, res) => { let SubmitRouteFunctions = require('./functions/submitFunctions.js'); let fn = new SubmitRouteFunctions(req, res); // ******************************************* // ***** THIS IS WHERE THE MAGIC HAPPENS ***** // ******************************************* Promise.all([fn.redundancyCheck, fn.getLocationInfo]) .then(fn.resetRedundantID) .then(fn.constructSurveyResult) .then(fn.storeResultInDB) .then(fn.redirectToUniqueURL) .catch((err) => { console.log(err); res.send("ERROR SUBMITTING YOUR RESULT: ", […]

尝试获取承诺nodejs时没有任何解决办法

我使用fetch来触发api代码。 const getData = (workspaceId, start, end, projectId, page, tmpData) => { return new Promise((resolve,reject) => { let result = [] if (tmpData !== null){ result.push(tmpData) } fetch('https://toggl.com/reports/api/v2/details?workspace_id='+workspaceId +'&since='+start+'&until='+end+'&user_agent=api_test&project_ids='+projectId +'&page='+page, { method: 'get', headers: { 'Authorization': 'Basic '+new Buffer(token.api_token+':api_token').toString('base64') } }).then(res=>{ return res.json() }).then(json=>{ if (json.data.length > 0){ result.push(json) console.log('on page '+page) getData(workspaceId, start, end, […]

节点承诺不推送所有的数据到数组

我正在使用AWS Node SDK来完成以下任务 – 获取地区 获取每个区域的集群ARN 获取经过筛选的ECS群集列表。 获取过滤群集的服务 我要脱钩的部分是第4步,列出每个群集的服务。 从本质上来说,每个集群列出服务的调用每个响应只能返回10个项目,因此会recursion调用该函数以查看是否存在另一个页面标记。 每个响应被推送到一个数组。 然后有一个最后的Promise.all打印出所有的答复。 问题是只有最初的调用被捕获,而不是任何下一个令牌的recursion调用。 任何帮助将非常感激 :) function getLiveCluster() { var liveClusterName = 'xx1-app-ecs' // Filter out the required clusters clustersAry.forEach(function(cluster) { if (cluster && cluster.clusterArns && cluster.clusterArns.length > 0) { cluster.clusterArns.forEach(function(clusterArns) { if (clusterArns.indexOf(liveClusterName) > -1) { var serviceParams = { cluster: clusterArns, maxResults: 10, nextToken: […]

我应该调用一个嵌套的诺言吗?

我被问到我的.catch处理什么许诺,现在我好奇,如果我是正确的。 我相信,在下面的代码中,如果内部承诺有错误,它将被我对调用承诺的.catch捕获。 我被问到的问题让我怀疑自己的理解,虽然我不认为我应该有一个嵌套的scheme,但我不确定替代解决scheme是什么。 我在节点FYI中使用本地承诺。 promise1(param1) .then((status) => { if (status !== 200) { return 'Error!'; } promise2(param1, param2)//param2 defined out of this scope .then((result) => { return 'Yay, result!'; }) }) .catch((error) => { return JSON.stringify({'Caught Error': error}); }) 我曾经想过只是做这样的事情,但承诺2需要第二个参数: promise1(param1) .then((status) => { if (status !== 200) { return 'Error!'; } return param1; }) […]

节点承诺拒绝不进入捕获

我有一个在findByIdAndRemove上调用findByIdAndRemove的方法。 如果我没有findid,因此不能从数据库中删除它,我想抛出一个错误。 删除仪表板function: deleteDashboard = (id) => { return Dashboard.findByIdAndRemove(id).exec((err, dashboard) => { if (err) return errorHandler.handle('dashboardService', err); if (dashboard === null) return Promise.reject({ status: 404, message: 'not found' }); return Promise.resolve(dashboard); }); }; 函数调用: return dashboardService.deleteDashboard(id) .then(dashboard => res.status(200).json(dashboard)) .catch(error => res.status(error.status).json(error)); 我不明白为什么调用dashboardService.deleteDashboard ID不在数据库中,不input捕获。 在debugging的时候,我检查了是否进入了if(dashboard === null)条件,并调用了Promise.reject() ,但是然后它进入了then而不是catch 。

如何从函数返回数据

我有这样的function: export function getAllUser() { let user; UserModel .find() .exec() .then((data) => { return data; }) .catch((err) => { return err; }); } 我怎样才能从这个function返回数据? 例如,我想要定义: user = getAllUser()

理解承诺链

我在NodeJS项目中使用Promise,并希望更好地理解Promise.chains。 我有一个暴露的function: 主要库函数,我希望我的用户调用。 它会返回一个承诺,然后用户需要处理的决心和拒绝的。 主库函数将调用许多其他库函数,我想要链接。 所以每个函数都会返回一个这样的承诺: mainLibraryFunction = function (arguments…) { return this.firstLibraryFn().then(secondLibraryFn).then(thirdLibraryFn)… } 这些都将返回一个承诺,可以拒绝或解决。 我想要的是,如果任何库函数拒绝,然后将拒绝传递到下一个函数,我想返回的MainLibraryFunction的拒绝。 因为否则我需要实现每个库函数的error handling。 因为他们每个人都会得到承诺作为参数,所以我需要检查每个函数,那么我得到解决或拒绝的承诺作为参数。 然后我需要通过所有的函数传递被拒绝的参数,直到最后的函数可以返回它的MainLibraryFunction。 这不是明智的。 那么处理这个问题的最佳做法是什么呢? 我应该在链条的末尾添加捕获吗? 我听说如果我加了一个尾巴,即使有人会拒绝,也应该打破这个链条。 然后从catch,我可以返回Promise.reject()出MainLibraryFunction。

我的承诺的成功块总是执行,即使当我返回一个404

当用户使用不正确的电子邮件和密码login时,即使服务器返回了400,客户端承诺的成功块仍然会执行。 我正在使用Redux和React,所以我打电话给使用axios调用HTTP请求的动作创build器。 我需要帮助,理解为什么我没有正确处理错误,因为我的应用程序的其余部分的身份validationfunction,如注册,注销等,都performance出相同的方式,即使我从服务器返回400状态。 这里是我从我的组件调用login,成功块总是执行: handleFormSubmit({ email, password }) { this.props.loginUser({ email, password }).then(() => { toastr.success("You are logged in!"); }).catch(() => { toastr.warning("Could not log in"); }) } 这里是动作创build者“loginUser”,当我从服务器返回400时,该函数的成功块不会运行: export function loginUser({ email, password }) { return function(dispatch) { return axios.post(`/users/login`, { email, password }) .then(response => { dispatch({ type: AUTH_USER }); localStorage.setItem('token', response.headers['x-auth']); browserHistory.push('/feature'); […]

从承诺中的callback中检索数据?

我现在有以下一段代码: const Promise = require('bluebird'); const readFile = Promise.promisify(fs.readFile); recordPerfMetrics: function(url) { var self = this; var perf, loadTime, domInteractive, firstPaint; var perfData = {}; readFile('urls.txt', 'UTF-8').then(function (urls, err) { if (err) { return console.log(err); } var urls = urls.split("\n"); urls.shift(); urls.forEach(function(url) { console.log(url); self.getStats(url).then(function(data) { data = data[0]; loadTime = (data.loadEventEnd – data.navigationStart)/1000 + […]