Tag: 承诺

如何有可变数量的蓝鸟承诺? (的NodeJS)

我有一个空的文件数组。 let arrayOfDocuments = []; 我想调用http请求(使用superagent)来下载一个文本文件,并将其内容放入我的arrayOfDocuments。 request.get('docs.google.com/document/d/SOME_FILE_NAME').then((res) => { arrayOfDocuments.push(res.text); }); 我得到的那部分,但这是棘手的部分。 我想把它放在一个for循环中,并在for循环之后做一些事情。 如此: for (let i = 0; i < numOfLinks; i++) { // send the http requests as above } //do stuff here but only after the above for loop is finished. 如果循环结束,我只能做最后一行? 现在我的程序运行的方式,for循环之后的代码在http请求得到响应之前运行并完成。 我认为有一种方法可以使用蓝鸟诺言做到这一点,但我不确定。 谢谢!

筛选被拒绝的承诺

我有一个Promise对象的数组,我想映射和筛选被拒绝的Promise 。 预期产出: const promises = [ failedPromise, successPromise, successPromise, ]; const resolvedPromises = promises.map(promise => ???); resolvedPromisesvariables应该容纳两个successPromise promise的输出。 我将如何实现这样的algorithm?

用recursion函数使用promise

我试图找出是否有可能在recursion函数中使用promise而不是标准callback。 我现在的方式是: function recursive(data, cb){ (function promiseProvider(data){ return newThenable(data).then(function(val){ if(val.a){ cb(null, val); } else { return promiseProvider(val); } }); })(data); } 这工作,但我不知道我怎么可以做一个纯粹的承诺实现。 也许这会工作? function recursive(data){ return newThenable(data).then(function(val){ if(val.a){ return // <<< ??? } else { return recursive(val); } }); } 大声笑没有这不工作…

JS:Promise不会返回值

我需要得到一个asynchronous函数的值。 我试图使用Promise,但是这不起作用: const res = new Promise(function (resolve, reject) { gm(readStream).size({ bufferStream: true }, function (err, size) { if (!err) resolve(size) }) }) console.log(res) 我得到的结果是Promise { <pending> }

在nodejs中承诺有麻烦

我正在尝试使用nodejs的承诺(我试图与节点承诺包); 然而,没有任何成功。 请参阅下面的代码: var express = require('express'), request = require('request'), promise = require('node-promise'); app.get('/promise', function(req, res) { var length = -1; new promise.Promise(request( {uri: "http://www.bing.com"}, function (error, response, body) { if (error && response.statusCode !== 200) { console.log("An error occurred when connected to the web site"); return; } console.log("I'll return: " + body.length); length = […]

解决循环内的承诺

我正在尝试使用for循环来读取JSON对象来格式化JSON数据,并通过将格式化的响应放入模型对象中将其发送回客户端。 在for循环中,我正在处理基于几个条件的两个promise。 有两个函数,每个函数都有返回的promise。所有promise都解决后,我怎样才能得到最终的数据? 提前致谢。 for (var i = 0, i<jsonData.length; i++){ if(someCOndition){ getSomeData().then(function(data){ //some operation using data }) } if(someOtherCOndition){ getSomeOtherData().then(function(data){ //some operation using data }) } }

不能从asynchronous承诺执行器函数中抛出错误

我一直在试图理解为什么下面的代码没有抓住throw 。 如果new Promise(async (resolve, …部分中删除async关键字new Promise(async (resolve, …那么它工作正常,所以它与Promise执行程序是一个asynchronous函数的事实。 (async function() { try { await fn(); } catch(e) { console.log("CAUGHT fn error –>",e) } })(); function fn() { return new Promise(async (resolve, reject) => { // … throw new Error("<<fn error>>"); // … }); } 在这里 , 这里和这里的答案重复“如果你在任何其他asynchronouscallback,你必须使用reject ”,但通过“asynchronous”,他们不是指async函数,所以我不认为他们的解释适用这里(如果他们这样做,我不知道如何)。 如果不是throw我们使用reject ,上面的代码工作正常。 我想从根本上理解为什么throw在这里不起作用。 谢谢!

无法在node-ftp模块中进行denodeify方法

我对node.js和promise样式函数调用都是新手。 通过在http://runnable.com/Ulatc0QnzUgUAAAK/adapting-node-js-with-q-for-promises看一个denodeify的例子,我试图denodeify node.js node-ftp模块的方法如下: var ftp = require('ftp'); var q = require('q'); var ftpClient = new ftp(); ftpClient.on('ready', function() { var ftpList = q.denodeify(ftpClient.list); ftpList().then(function(list) { console.log(list); }.then(null, function(err) { console.log(err); }).done(function() { ftpClient.end(); }); }); ftpClient.connect(); 但是,当与节点运行该代码,它显示错误“列表错误:TypeError:对象#没有方法”_pasv'“ 我不确定那段代码有什么问题。 有人知道这有什么问题吗? 你能指点我一些方法来debugging/疑难解答错误信息的原因? 谢谢。

我可以在参数中使用承诺吗?

我有两个function: 第一个使一个http post来获得一个xmlstring function post(url, formData) { return new Promise(function (resolve, reject) { // make an http post and get results (xml string) request(url, formData, function(error, xml) { if (error) reject(error) resolve(xml) }) }) } 把xml转换成一个对象 function xmlToObject(xml) { return new Promise( function (resolve, reject) { // transform xml string to an object using xml2js […]

Promisify Socket.IO / EventEmitter

我有点惊讶的是,当我在Promisify Socket.IO上search时找不到多less东西。 这是不是罕见的? 我也有麻烦,自己promisify它: Promise.promisifyAll(io) io.onceAsync('connect') .then((socket) => …) .catch((err) => console.log(error)) 这总是触发错误的情况下,我假设,因为.once是一个callback只有一个参数,其中承诺希望第一个是错误。 任何想法如何处理这些事情?