Tag: 承诺

Promise.resolve和new Promise(resolve)是可以互换的

我认为Promise.resolve和new Promise(resolve)是可以互换的。 考虑一下: 一个。 new RSVP.Promise(function (resolve, reject) { resolve(); }).then(function () { return new RSVP.Promise(function (resolve) { resolve("HI") }); }).then(function (result) { console.log(result); }); B. new RSVP.Promise(function (resolve, reject) { resolve(); }).then(function () { return RSVP.resolve("HI"); }).then(function (result) { console.log(result); }); 都打印“HI”,如我所料。 所以我觉得如果我不需要“拒绝”什么的话。 我只能写RSVP.resolve(); 为简单起见。 但考虑一下这个例子: new RSVP.Promise(function (resolve, reject) { resolve(); }).then(function () […]

用http.get node.js承诺

我在做nodechool练习 这个问题和前面的问题(HTTP COLLECT)是一样的,你需要使用http.get()。 但是,这次您将获得三个URL作为前三个命令行参数。 您必须收集每个URL提供给您的完整内容并将其打印到控制台(stdout)。 您不需要打印出长度,只需将数据打印为string; 每个URL一行。 问题在于,你必须按照与作为命令行参数提供给你的URL相同的顺序打印出来。 换句话说,我要注册3个http.get请求,并按顺序打印它接收到的数据。 我正在尝试与承诺=另一个请求不会被称为直到第一个没有结束。 我的代码看起来像这样 var http=require("http"); var collect=[]; var dat=[]; for( var i = 2 ; i < process.argv.length;i++){ collect.push(process.argv[i]); } function chainIt(array,callback){ return array.reduce(function(promise,item){ return promise.then(function(){ return callback(item) }) },Promise.resolve()) } function getIt(item){ return http.get(item,function(response){ response.on("data",function(data){ dat.push(data); }) }) } chainIt(collett,function(item){ return getIt(item) }) }).then(function(){ collect.forEach(function(x){ console.log(x); […]

节点承诺链接导致函数中返回语句过多

假设下一个重置密码function: function forgotPassword(email){ return Promise.resolve().then(function() { return User.findByMail(email); }).then(function(user){ if (!user) { return Promise.reject({message: 'Cannot find user with that email'}); } return [user, tokensService.createRandomBytes()]; }).spread(function(user, token){ user.resetPasswordToken = token; user.resetPasswordExpires = Date.now() + 3600000; // 1 hour return [user.saveAsync(), token]; }).spread(function(user, token){ return emailService.sendResetPassword(user.email, token); }); } 这个函数的调用者期待一个承诺作为返回值。 但是我的问题是:这是链接承诺的正确方法吗? 它看起来像所有的返回语句使代码看起来不可读。 有没有办法避免这种情况? 有没有办法避免return Promise.resolve().then…在开始? PS。 我正在使用bluebird作为promise […]

node.jsparsingpromise和返回值

我使用Microsoft bot框架来创build一个“简单的”PoC机器人。 我用一个教程作为基础,并扩展它。 对于不同的意图(例如,问候,再见等)以及其中有更多逻辑(reqstatus)的函数,我有几个基本函数。 简单的(即greeting.js)很好地返回答案,但更复杂的答案不(reqstatus.js)。 在独立的脚本中运行reqstatus.js的主代码(没有第一个“const getReqStatus =(entity)=> {”)。 server.js (main) – >参见调用“if(intent){”… const getFeelings = require('./intents/feelings.js') const getGoodbyes = require('./intents/goodbyes.js') const getGreetings = require('./intents/greetings.js') const getHelp = require('./intents/help.js') const getReqStatus = require('./intents/reqstatus.js') … const bot = new builder.UniversalBot(connector) // Intents based on definitions on recast const INTENTS = { feelings: getFeelings, goodbyes: getGoodbyes, greetings: […]

asynchronous函数返回Promise {<pending>}?

我有以下的asynchronous函数: async function readFile () { let content = await new Promise((resolve, reject) => { fs.readFile('./file.txt', function (err, content) { if (err) { return reject(err) } resolve(content) }) }) console.log(content) } readFile() 这运行得很好。 它按预期的方式将文件缓冲区输出到控制台。 但是现在,如果我尝试返回值: async function readFile () { let content = await new Promise((resolve, reject) => { fs.readFile('./file.txt', function (err, content) { if […]

function类似Promise.some /任何未知数量的承诺

我正在node.js(V8.1.3)中创build一个脚本,它查看来自多个API的类似JSON数据并比较这些值。 更确切地说,我正在研究不同股票(实际上是encryption货币)的不同市场价格。 目前,我正在使用promise.all来等待来自各个API的所有响应。 let fetchedJSON = await Promise.all([getJSON(settings1), getJSON(settings2), getJSON(settings3) … ]); 然而,Promise.all抛出一个错误,如果只是一个承诺拒绝一个错误。 在蓝鸟docos有一个叫做Promise.some的函数,它几乎是我想要的。 据我所知,这需要一系列的承诺,并解决两个最快的承诺解决,否则(如果less于2个承诺解决)会引发错误。 问题在于,首先,我不希望最快的两个承诺解决了它返回的问题, 我希望任何成功的承诺被返回 ,只要有超过2个。这似乎是什么Promise.any除了最小计数为1(我要求最小计数为2) 其次,我不知道我会等待多less承诺(换句话说, 我不知道有多lessAPI将要求数据 )。 它可能只有2个,也可能是30个。这取决于用户的input。 目前写这个在我看来,可能只是一个方法来有一个承诺。任何2计数,这将是最简单的解决scheme。 这可能吗? 顺便说一句,不知道标题是否真的总结了这个问题。 请build议标题的编辑:) 编辑:我可能会写脚本的另一种方式是,前两个API加载开始得到计算,并推送到浏览器,然后每个下一个JSON加载和计算后。 这样我就不用等待所有的承诺,在我开始计算数据并将结果传递给前端之前,就完成了。 这可能与一个函数也适用于其他情况? 我的意思是这样的: 并行请求JSON … | —– JSON1 —— | | — JSON-失败— | > catch错误>做一些错误。 不影响下一个结果。 | ——- ——- JSON2 | >满足最低2个结果>计算JSON>到浏览器。 | ——- JSON3 ——— | […]

使用JS Promises执行多个asynchronous查询来构build一个对象

在最近发现了JS的承诺之后 , 我一直在研究它们,以便我可以构build一个特定的function,允许我执行4个asynchronous查询,使用每个结果构build一个对象,最终我可以发送一个对象我的节点应用程序 最后一个对象由3个包含每个查询的结果行的数组属性组成。 看来,我已经做了错误的处理承诺,但是,因为最终, game没有build立。 它作为一个空的对象发送。 这是一个JSFiddle。 我的错误是什么? 以下是我到目前为止: function sendGame(req, res, sales, settings, categories) { var game = new Object(); game.sales = sales; game.settings = settings; game.categories = categories; JSONgame = JSON.stringify(game); res.writeHead(200, { 'Access-Control-Allow-Origin': 'http://localhost', 'Content-Length': JSONgame.length, 'Content-Type': 'application/json' }); res.write(JSONgame); res.end(); console.log('Game: ' + JSON.stringify(game, null, 4)); console.log('————————————–'); console.log('User ' + […]

蓝鸟 – 如何在嵌套承诺中传播错误

PromiseA().then(function(){ PromiseB().catch(function (e) { throw e; }) }).catch(function (e) { // I want exceptions thrown in the nested promise chain to end up here. }) 我如何从嵌套的承诺中获得exception,以达到父承诺?

如何正确的链承诺互相依赖的电话?

我有以下代码: const request = require('request-promise'); request(validateEmailOptions).then(function(result) { if (result.valid) { request(createUserOptions).then(function (response) { if (response.updatePassword) { request(modifyUserOptions).then(function (response) { return res.redirect('/signin'); }).catch(function(error) { return res.redirect('/error'); }); } }).catch(function(error) { return res.redirect('/error'); }); } else { return res.redirect('/error'); } }) .catch(function (reason) { return res.redirect('/error'); }); 基本上,这是一个请求调用链,每个请求调用都基于前一个调用的结果。 问题是,在每种情况下我都有更多的行,结果,我的代码变得臃肿,难以阅读和遵循。 我想知道是否有更好的方法来使用请求 – 承诺或简单的请求和蓝鸟来编写调用链。

通过github APIasynchronousrecursion来获取文件

我正在使用github API来遍历一个repo并获取其中的所有文件的列表。 这个结构被称为“树”。 一棵树基本上是一个子目录。 所以如果我想看到一个树的内容,我需要对该树的ID进行GET请求。 响应将是表示该树中项目的对象数组。 但是其中一些项目也是树木,所以我不得不再次请求那棵树。 回购可能是这样的: |src app.jsx container.jsx |client index.html readme.md 这个结构将由以下对象来表示 [ { name:'src', type:'tree', id:43433432 }, { name:'readme.md', type:'md', id:45489898 } ] //a GET req to the id of the first object would return the following array: [ { name:'app.jsx', type:'file', id:57473738 }, { name:'contain.jsx', type:'file', id:748433454 }, { name:'client', […]