Tag: es6 promise

在承诺中返回promise和返回undefined之间的区别

我不太清楚这两种常见情况之间的区别。 说我们有这个: user.save().then(function(val){ anotherPromise1(val); }).then(function(val){ anotherPromise2(val); }).catch(function(err){ }); 与: user.save().then(function(val){ return anotherPromise1(val); }).then(function(val){ return anotherPromise2(val); }).catch(function(err){ }); 我知道这有所作为,但究竟如何?

如何通过node.js中的本地promise来全局处理exception?

我知道如何处理承诺中的具体错误,但我有时看起来像这样的代码块: somePromise.then(function(response){ otherAPI(JSON.parse(response)); }); 有时,当JSON.parse throw s时,我得到无效的JSON,导致无声的失败。 一般来说,我必须记得在我的代码中添加一个.catch处理程序给每个单独的承诺,当我不知道我在哪里忘记了。 我如何在代码中find这些被抑制的错误?

什么决定使用promises或setTimeout延迟函数的调用顺序?

推迟函数的执行,例如在自定义事件处理中,是JavaScript中的一种常见模式(参见这里的例子)。 它曾经是使用setTimeout(myFunc,0)是唯一的方法来做到这一点,但承诺现在有一个替代: Promise.resolve().then(myFunc) 。 我以为这些东西几乎可以做同样的事情,但在一个包含自定义事件的库上工作时,我想我会发现是否有差异,所以我把下面的块放到节点中: var logfn=function(v){return function(){console.log(v)}}; setTimeout(logfn(1),0); Promise.resolve().then(logfn(2)); logfn(3)(); 我期待在控制台3,1,2上看到,但是我看到了3,2,1。所以换句话说,Promise不等同于使用setTimeout,并且先出来块。 至less在Node中。 我在Chrome和Firefox中重复了testing,结果相同,但是在Edge中出现了3,1,2。我也希望非本地的promise库能够在后台使用setTimeout,所以会和Edge一样。 什么决定了这些呼叫的顺序被解决? 这些不同的环境使用什么模型来确定执行顺序? 以上任何一种情况是否代表标准或非标准行为? 附言我没有build议依靠任何这种保持一致,我只是好奇。 在下面给出的答案指出我正确的方向,正如在下面的评论中简要提到的,我在杰克·阿奇博尔德杰克·阿奇博尔德 ( 杰克·阿奇博尔德的一篇杰出的文章中find了完整的答案(与上面的代码几乎相同),我虽然我加在这里,而不是把它埋在评论里。

Promise.all安装在babel ES6的实现中

我使用babel来传递我的node.js@0.10.x代码,而且我被承诺所困。 我需要allSettled可以在q和bluebird或allSettled使用的allSettledfunction。 在巴贝尔的核心js的Promise ,没有allSettled方法。 目前我使用q.allSettled作为解决方法: import { allSettled } from 'q'; 在babel polyfill中是否有这样的东西? 或者,这是一个很好的algorithm,我尝试实现?

我是否应该避免asynchronous处理Promise拒绝?

我刚刚安装了Node v7.2.0,并了解到以下代码: var prm = Promise.reject(new Error('fail')); 导致这个消息: (node:4786) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: fail (node:4786) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 我理解这个背后的原因,因为许多程序员可能经历了一个Error最终被一个Promise吞噬了。 不过,我做了这个实验: var prm = Promise.reject(new Error('fail')); setTimeout(() => { prm.catch((err) […]

何时不使用承诺

在阅读了许多关于es6的承诺以及为什么要实现这些承诺的文章之后,我感到所有的(不重要的)javascript函数都应该是承诺的。 事实上,使用它们编写代码让我感觉很好,因为我避免了厄运的三angular形,并且看起来变得简洁明了。 (这真的使得关于执行的推理更简单)。 我没能find的是:什么时候不使用承诺? 我何时避免使用它们? 更新: 虽然我已经看到一些像API一致性的伟大点,我还没有find坚实的NO情况。 Lux的答案表明,获取事件发射器的操作应避免它们,因为反复出现的callback与promise不兼容。 不过,我觉得答案现在仍然缺乏实质性的检查(正确)。

使用ES6的Promise.all()时限制并发的最好方法是什么?

我有一些代码遍历从数据库中查询的列表,并为该列表中的每个元素发出HTTP请求。 该列表有时可能是一个相当大的数字(以千计),我想确保我没有击中具有数千个并发HTTP请求的Web服务器。 这个代码的缩写版本目前看起来像这样… function getCounts() { return users.map(user => { return new Promise(resolve => { remoteServer.getCount(user) // makes an HTTP request .then(() => { /* snip */ resolve(); }); }); }); } Promise.all(getCounts()).then(() => { /* snip */}); 此代码在节点4.3.2上运行。 重申,可以Promise.all ,所有的时间都只有一定数量的承诺在进行。

Intellij Idea警告 – 用aysnc / await“返回的Promise被忽略”

我使用Node.js v7.3在我的代码中使用Express.js 。 在此我创build了一个User Router ,将请求转发给我的User Controller 。 我在User Controller内部使用async / await来执行asynchronous调用。 问题是IntelliJ给了我一个警告 从login()返回的Promise被忽略。 事情是我甚至没有从login()方法返回任何东西。 这是代码 – UserRouter.js router.post('/login', function (req, res, next) { userController.login(req, res); // I get the warning here }); UserController.js exports.login = async function (req, res) { try { const verifiedUser = await someFunction(req.body.access_code); let user = await User.findOrCreateUser(verifiedUser); res.status(200).send(user); } […]

ES6承诺 – 在承诺链中调用同步function

我目前正在尝试承诺,并有一个非常基本的问题! 在承诺链中,调用同步函数是不好的做法吗? 例如: .then(function(results) { if(checkIfResultInMemory(results) === true){ return getTotalFromMemory() } return results; }) 还是应该我的同步function重构承诺还呢?

如何pipe理对共同请求模块和NodeJs中的文件的响应?

我使用Co-Request从http url中读取Zip文件,并且我有下面的代码从服务器读取.. 该代码已经工作。 但是我不知道如何写一个文件的响应Zip。 var co = require( "co" ); var request = require( "co-request" ); var options = { url: "http://www.example.com/sample.zip", headers: { 'Token': Appconfig.Affiliate_Token, 'Affiliate-Id' : Appconfig.Affiliate_Id } } console.log( "Downloading : zip file" ); var j = yield request( options ); 共同请求实际上是对Request的包装,我发现下面的代码将文件传输到stream中。 但不知道如何使用共同请求和yield来编写相同的代码。 request.get('http://example.com/img.png').pipe(request.put('http://example.com/img.png')) 请帮助如何使用良率和共同请求将响应zip写入文件