有什么区别: new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return "bbb"; }) .then(function(result) { console.log(result); }); 和这个: new Promise(function(res, rej) { res("aaa"); }) .then(function(result) { return Promise.resolve("bbb"); }) .then(function(result) { console.log(result); }); 我问,因为我得到不同的行为使用Angular和$ http服务链接.then()。 因此,上面的例子有点太多了。
在Node.js添加了对promise的本地支持之后,是否还有理由使用像Q或者BlueBird这样的库? 例如,如果您正在开始一个新项目,并假设在这个项目中没有任何使用这些库的依赖关系,那么我们可以说没有更多的理由来使用这样的库吗?
我有一个HTTP API,在成功和失败时都返回JSON数据。 一个例子失败将如下所示: ~ ◆ http get http://localhost:5000/api/isbn/2266202022 HTTP/1.1 400 BAD REQUEST Content-Length: 171 Content-Type: application/json Server: TornadoServer/4.0 { "message": "There was an issue with at least some of the supplied values.", "payload": { "isbn": "Could not find match for ISBN." }, "type": "validation" } 我想在我的JavaScript代码中实现的是这样的: fetch(url) .then((resp) => { if (resp.status >= 200 && […]
特定 var promises = [Promise.resolve("a"), Promise.reject("b")]; Promise.all(promises.map(function(p, index) { return p.then(function(data) { console.log("inside .map()", data, "index", index) return data }, function(err) { console.log(err); return err }) })) .then(function(complete) { console.log("all promises after .map()", complete) }, function(err) { console.log("err", err) }) 为什么onRejected不会在.then(onFulfilled, onRejected)之后Promise.all() ? jsfiddle https://jsfiddle.net/9gprLc7q/ https://jsfiddle.net/9gprLc7q/
是否有任何事件发生,说明过渡/渲染已经完成(并且DOM是可见的/准备好的)。 setupcontroller / activate在构build/渲染dom之前 didInsertElement只有在我已经插入一个元素的时候才会被触发,而我只是将模型切换到其下面。 我真正想要的是过渡是完整的事件 我想我可以做到这一点,但我希望它已经build成了… Ember.Router.reopen({ didTransition:function(infos) { this._super(infos); console.log('transition complete'); } }); 更酷的将是一个过渡完成的路线的callback,我可能不得不写这个,并提交拉请求。
我想澄清这一点,因为文件不太清楚; Q1: Promise.all(iterable)是顺序还是并行处理所有的promise? 或者更具体地说,它就像运行链式承诺一样 p1.then(p2).then(p3).then(p4).then(p5)…. 还是其他types的algorithm,其中所有p1 , p2 , p3 , p4 , p5等被同时调用(并行),并且一旦所有parsing(或一个拒绝)就返回结果? 问题2:如果Promise.all并行运行,有没有一种方便的方法来按顺序运行一个迭代器? 注意 :我不想使用Q或Bluebird,但所有原生ES6规格。
我已经遇到了一些JavaScript承诺的问题,尤其是堆叠链。 任何人都可以向我解释这些不同的实现之间的区别(如果有的话)? 实施1 var serverSidePromiseChain; serverSidePromiseChain = async().then(function(response) { console.log('1', response); return response; }).then(function(response) { console.log('2', response); return true; }).then(function(response) { console.log('3', response); // response expected to be 'true' return async3(); }).then(function(response) { console.log('4', response); return async4(); }) 实施2 var serverSidePromiseChain; serverSidePromiseChain = async().then(function(response) { console.log('1', response); return response; }); serverSidePromiseChain.then(function(response) { console.log('2', response); return […]
我正在使用生成器和蓝鸟编写代码,我有以下几点: var async = Promise.coroutine; function Client(request){ this.request = request; } Client.prototype.fetchCommentData = async(function* (user){ var country = yield countryService.countryFor(user.ip); var data = yield api.getCommentDataFor(user.id); var notBanned = yield authServer.authenticate(user.id); if (!notBanned) throw new AuthenticationError(user.id); return { country: country, comments: data, notBanned: true }; }); 但是,这是一种缓慢,我觉得我的应用程序正在等待太多的I / O,它不是并行的。 我怎样才能提高我的应用程序的性能? 对于countryFor + 400来说,对于getCommentDataFor + 600来说,总的响应时间是800,因此在总共1800毫秒内是很多的。
我正在尝试使用承诺实现一个while循环。 这里概述的方法似乎工作。 http://blog.victorquinn.com/javascript-promise-while-loop它使用这样的function var Promise = require('bluebird'); var promiseWhile = function(condition, action) { var resolver = Promise.defer(); var loop = function() { if (!condition()) return resolver.resolve(); return Promise.cast(action()) .then(loop) .catch(resolver.reject); }; process.nextTick(loop); return resolver.promise; }; 这似乎使用反模式和弃用的方法,如投和延期。 有没有人知道一个更好或更现代的方式来实现这一目标? 谢谢
我在这里遵循规范,我不确定是否允许onFulfilled被多个参数调用。 例如: promise = new Promise(function(onFulfilled, onRejected){ onFulfilled('arg1', 'arg2'); }) 这样我的代码: promise.then(function(arg1, arg2){ // …. }); 会收到arg1和arg2 ? 我不在乎如何执行任何具体的承诺,我希望严格遵循w3c规范的承诺。