编写一个演示脚本来理解promises我嵌套了多个promises(使用promises.all()在then()之后继续处理所有promises之后继续).嵌套的promises的then()s无法解析:var Promise = require("bluebird");var array = [];// push promises onto array new Promise(function(resolve, reject) {setTimeout(function() { for (var i = 5 - 1; i >= 0; i--) {array.push(returnapromise());console.log("pushed promise number", i, "onto array")...
我有一个函数,如果它找到任何东西,它将查找缓存,否则然后它将继续获取数据并设置缓存.这是非常标准的.我想知道错误是否发生在最内部的功能上,它是否会保持泡沫到最外层的承诺?所以,我可以只有一个而不是一个. 这是我的代码. 我正在使用Bluebirdvar _self = this;return new Promise(function(resolve, reject) {_self.get(url, redisClient).then(function getCacheFunc(cacheResponse) {if(cacheResponse) {return resolve(JSON....
我在一本书中找到了以下例子:function User() {EventEmitter.call(this);this.addUser = function (username, password) {// add the user// then emit an eventthis.emit("userAdded", username, password);}; }var user = new User(); var username = "colin"; var password = "password";user.on("userAdded", function(username, password) {console.log("Added user " + username); });user.addUser(username, password);在我...
我使用pg-promise访问我们的postgres数据库.我想调用接受几何数据类型(PostGIS)的存储proc foo(geom).我只有lats / lngs开头,所以我想用postGIS转换它们. 这看起来像这样:db.func('foo', 'ST_MakePoint(' + location.lat + ', ' + location.lng + ')').then((result) => {console.log(bar);});我现在收到一个错误,抱怨我的几何体无效(转换不会发生).我确信ST_MakePoint适用于我拥有的值.我猜它在数据库上执行时将其解释为字符串而...
我一直很好奇,如果Promise在任何位置都被拒绝,那么下面的()仍然会被执行吗?以下面的代码为例:Promise.reject('reJECTed') .then(() => {console.log('before resolve()');return Promise.resolve('reSOLVed'); }) .then((msg) => {console.log('reSOLVed inside 1st then()');console.log(msg); }, (msg) => {console.log('reJECTed inside 1st then()');console.log(msg); }) .then((msg) => {console.log('reSOLVing inside 2n...
在以下代码块中,仅将“第一个承诺”记录到控制台.这是为什么?我试图编写一个测试来弄清楚.tatch()在.catch()之后的执行情况,但是除了第一个承诺之外什么也没有.这里发生了什么?function foo() {return new Promise((resolve, reject) => {return console.log('first promise')}).then(() => console.log('first then')).catch(() => console.log('catch block')).then(() => console.log('last block')).then(() => resolve)}foo...
我想以递归方式记录目录中的所有文件,并在记录所有文件时返回确认.这是目录结构. 样品│app.js└───Temp1││temp1.js│└───Temp2││temp2.??js 这是代码 “`let readDirectory = function(dirname){return new Promise((resolve,reject)=>{fs.readdir(dirname,(err,files)=>{if(err) reject(err);files.forEach(file=>{fs.stat(`${dirname}/${file}`,(err,stats)=>{if(stats.isDirectory()){readDirectory(`${dirname}/${...
我在Angular(4)项目中使用了Promises,我对它们有一个问题,我在文档中找不到对它的响应. 当我创建一个Promise时,我基本上等待服务/派对的异步回答.但是,我应该期待这个承诺保持待定状态多长时间?是否有任何机制会在一段时间后终止它?这种等待/待定的概念有多可靠? 让我们假设我需要从忙碌的服务中获取一些数据,即使在等待几分钟后也可以回答,可能更多,无论响应的计算是资源密集型进程还是该服务与另一个正在响应的服务相关联非常...
我正在使用chai-as-promised测试一些承诺.我的问题是我不确定如何在一次测试中使用多个期望语句.为了使expect().to.be.fulfilled正常工作,我需要返回它,如下所示:it('test', () => {return expect(promise).to.be.fulfilled }…或使用通知,如下所示:it('test', (done) => {expect(promise).to.be.fulfilled.notify(done) }问题来自于我需要检查的另一件事,例如调用某个函数,如下所示:it('test', (done) => {var promise = doSom...
我有一个带有promise的函数,每次都必须使用不同的params执行n次.我想以一种方式链接承诺,即脚本当时总是处理3-4个承诺. 我用promise.all做了它,它同时执行3个,当所有的promises结算时,它继续下一个3. 如何使其工作,当3中的一个解决它立即与另一个开始,但总是在当时最大3工作?for( var i = 0; i < tasks.length; i++){if( i > 0 && i%3 == 0 ){await Promise.all([doTaskFunction(tasks[i]),doTaskFunction(tasks[i-1]),doTaskFunc...
我有这样的字典: {go:[‘去’,’跑’],爱:[‘激情’,’喜欢’]} 密钥的值是其同义词. ‘getSynonymWords(word)’是一个异步函数,它返回一个promise,其中的值是与传递的参数对应的同义词列表.我如何循环遍历对象以递归方式获取另一个对象,如下所示:{went: [], run: [], passion: [], like: []}这是我的一段代码:function getRelatedWords(dict) {return new Promise(function(resolve) {var newDict = {}; for(var key in dict...
我正在编写一个与Apple通信以验证收据的应用.他们有一个沙盒和生产网址,你可以发布到. 与Apple通信时,如果您收到21007状态,则表示您要发布到生产URL,当您应该发布到沙箱时. 所以我写了一些代码来促进重试逻辑.这是我的代码的简化版本:var request = require('request'), Q = require('q');var postToService = function(data, url) {var deferred = Q.defer();var options = {data: data,url: url};request.post(options, functio...
请注意:以下是在不同浏览器上表现不同的问题.所以这可能是一个浏览器实现问题.无论如何,我会喜欢一些建议. 在我的应用程序中,我创建了一些承诺,我可能不会消费,直到将来很长一段时间.哪个应该没问题,毕竟它们是承诺. 如果解决了存储的承诺,则没有问题.我可以根据自己的需要尽可能多地消费它,也可以随心所欲地消费它.正如所料. 但是,如果被拒绝的承诺被拒绝,则存在问题.除非我在制作完成后立即消除拒绝(不确定多久),否则Chrome或Fi...
目录 1 JavaScript的异步执行 1.1 概述 1.2 回调函数 1.3 事件监听 1.4 发布/订阅 1.5 异步操作的流程控制 1.6 串行执行 1.7 并行执行 1.8 并行与串行的结合 2 Promise对象 2.1 简介 2.2 Promise接口 2.3 Promise对象的生成 2.4 用法辨析 3 Promise的应用 3.1 加载图片 3.2 Ajax操作 3.3 小结 Promise是JavaScript异步操作解决方案。介绍Promise之前,先对异步操作做一个详细介绍。 1 JavaScript的异步执行 1.1 概述 Javascript语言...
es6 一经推出,Promise 就一直被大家所关注。那么,为什么 Promise 会被大家这样关注呢?答案很简单,Promise 优化了回调函数的用法,让原本需要纵向一层一层嵌套的回调函数实现了横向的调用,也就是链式调用。 我们先来看下面的代码:1 function getData(){ 2 setTimeout(()=>{ 3 var name = "zhangsan"; 4 }, 1000) 5 } 6 7 getData(); 在上面的代码中,我们模拟了一个异步时间,一秒后输出 name = "zhangsan"...