Articles of 承诺

从promisecallback更新对象字面值中的值的build议方法

我意识到有可能有10种方法来做到这一点,我通常会遇到一些笨拙的方式来实现它 – 但是我想得到一些关于“干净”的方式来更新对象字面值从承诺callback。 我目前的用例是: let groups2 = { groupsList: [], updateGroups: () => { return axios({ 'url': 'https://gitlab.com/api/v3/groups?per_page=500', 'method': 'GET', 'headers': { 'private-token': GITLAB_API_PRIVATE_TOKEN, 'cache-control': 'no-cache' } }) .then(function (response) { console.log(response); groups2.groupsList = response.data; }) .catch(function (error) { console.log(error); }); } } 这有效,但是“感觉不好”? 特别是从内部引用“groups2”(在这种情况下的callback)。 基本上我想要一个可以通过可能包含promise的函数对自己的值进行操作的单例。 我正在寻找更好的想法如何做到这一点。

如何在vo.js循环中产生多重承诺?

基于这个例子 – vo / examples / 9-pipeline-composition.js ,我将如何return yield for this for循环的每个迭代的承诺? 目前循环运行一次,并产生一个单一的承诺。 function * get (urls) { for (var i = urls.length – 1; i >= 0; i–) { console.log(urls[i]) return yield http.get(urls[i]) } } function status (res, params) { return res.status } let scrape = vo(get(['http://standupjack.com', 'https://google.com']), status) vo([ scrape ]) .then(out => […]

我应该如何在节点js中使用db + http调用的promise

我需要执行哪个系统 从父集合获取数据。 检查在redis中find的特定密钥 如果没有,然后做一个http调用并获取json数据,然后设置caching 如果是,则从caching中获取数据 将数据保存到父标识的子集合中。 我有使用callback这样的工作解决scheme。 MongoClient.connect(dsn).then(function(db) { parentcollection.findOne({"_id" : new ObjectId(pid)}, function(err, data) { var redis = require("redis"), client = redis.createClient(); client.on("error", function (err) { console.log("Error " + err); }); // If not set client.get(cacheKey, function(err, data) { // data is null if the key doesn't exist if(err || data === null) { […]

尝试将RegEx与由promise返回的文本进行匹配 – 获取空string

我正在使用PDF.js从PDF获取文本,然后使用RegEx进行parsing。 parsetext函数接受一个由promise返回的text参数: gettext: function(url){ var self = this; var data = url; console.log('attempting to get text'); return pdfjs.getDocument(data).then(function(pdf) { var pages = []; for (var i = 0; i <= 1; i++) { pages.push(i); } return Promise.all(pages.map(function(pageNumber) { return pdf.getPage(pageNumber + 1).then(function(page) { return page.getTextContent().then(function(textContent) { return textContent.items.map(function(item) { return item.str; }).join(' '); }); }); […]

节点JS:使用承诺的链接承诺

我需要链接使用请求承诺的承诺,所以它有点链接嵌套承诺。 想象一下代码: const rp = require('request-promise'); function doStuff(){ for ( let i = 0; i <= 10; i++ ){ methodA(); } }; function methodA(){ let options = {…}; rp(options) .then(result => methodB(result)) .catch(err => console.log(err)); }; function methodB(resultA){ let options = {uri: resultA}; rp(options) .then(result => methodC(resultA, result)) .catch(err => console.log(err)); }; function methodC(resultA, resultB){ […]

然后承诺,并在nodeJS中捕获

我的nodejs服务器有问题。 我想要的是,如果电子邮件存在于我的分贝,我想发送一个电子邮件到该地址,但如果不是,我想发送和错误消息到客户端。 我有这个控制器: reset(req, res) { return this.service.getByEmail(req.body.email) .then(this.mapper.outputEmail.bind(this.mapper)) .then(res.json.bind(res)).catch(res.send.bind(res)); } 我以邮寄方式发送电子邮件。 我使用一个服务,调用我的数据库寻找该电子邮件,我有这个映射器: outputEmail(outputEmail){ return { email: outputEmail.email }; } 我的服务: getByEmail(correo) { return this.db.find({ where: { email: correo } }); } 我的问题是,我不知道如何控制,如果我得到一个空的json对象..如果我发送一封邮件,它不存在我得到一个{}回应,但如果我发送一个存在的电子邮件我得到{电子邮件:erwrr@gmail.com}。 我想要的是,如果我得到一个空的JSON,我只是想返回一个错误,说该电子邮件不存在,但如果数据库中的查询得到一个真正的电子邮件,我想继续执行另一种方法,发送电子邮件到该地址。

我在每个模块文件中都需要Promise.promisifyAll()吗?

如果我需要与Promise(Bluebird)的多个文件中的fs,我应该每次调用Promise.promisifyAll(require('fs'))? 或者用一个小模块更好 module.exports = Promise.promisifyAll(require('fs')) 并只导入该模块? 如果我做对了,我的第一个select就是每次都提供fs模块,而第二个select只会链接到同一个模块,而这个模块只有一次被启动。 或者将是我的第一个select像我的第二个select一样? 编辑:我testing了两个选项: const Promise = require('bluebird') let time1start = Date.now() for(let i = 0; i <= 1000;i++){ let fs = Promise.promisifyAll(require('fs')) } console.log('Time gone 1 Test: ' + (Date.now() – time1start)) let time2start = Date.now() for(let i = 0; i <= 1000;i++){ let fs = require('./testInc') } console.log('Time […]

尝试获取承诺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, […]

节点testing.test不是一个函数

我试图调用另一个文件的function,但不pipe我做什么,它不会识别该function。 我明白了 uncaughtException:testing.test不是一个函数 //testing.js module.exports = function(){ return{ "test" : function(){ return new Promise(function (resolve, reject) { console.log('worked!') resolve(resolve({'data': "success"})) }) } } } 然后在任何其他文件中: //other file var testing = require("testing.js"); testing.test().then(function(data){ console.log(data) }) 我知道目录是正确的,我的IDE甚至表明,我试图调用的是一个函数。 我哪里做错了?

将对象从SQL查询函数传递给一个单独的函数

我是新来的节点和承诺。 我有两个文件 – server.js和db.js server.js db.js作为模块导入。 我从db.js模块中的SQL数据库中获取一些数据,并试图将这些数据传递给server.js的函数。 我已经成功从数据库中提取数据,但是当我尝试将它传递给server.js的函数时,它只返回一个undefined值。 这是代码 server.js const db = require('./db.js'); app.post('/api/trigger-push-msg/', function (req, res) { return getSubscriptionsFromDatabase() .then(function(subscriptions) { // Do something }); }); function getSubscriptionsFromDatabase() { return new Promise((resolve, reject) => { let subscriptions = db.getSubscriptions(); console.log(subscriptions); // this only prints "undefined" if (subscriptions != undefined) { resolve(subscriptions); } else […]