我有一个promise对象数组,必须按照它们在数组中列出的相同顺序进行解析,即我们不能尝试解析一个元素,直到前一个元素被解析(如方法所示Promise.all([...])).
如果一个元素被拒绝,我需要链接立即拒绝,而不尝试解析以下元素.
我该如何实现这个,或者是否存在这种sequence模式的现有实现?
function sequence(arr) {
return new Promise(function (resolve, reject) {
// try resolving all elements in 'arr',
// but strictly one after another;
});
}
Run Code Online (Sandbox Code Playgroud)
编辑
初始答案表明我们只能sequence得到这些数组元素的结果,而不是它们的执行结果,因为它是在这样的例子中预定义的.
但是,如何以避免早期执行的方式生成一系列承诺呢?
这是一个修改过的例子:
function sequence(nextPromise) {
// while nextPromise() creates and returns another promise,
// continue resolving it;
}
Run Code Online (Sandbox Code Playgroud)
我不想把它变成一个单独的问题,因为我认为它是同一个问题的一部分.
解
下面的一些答案和随后的讨论有点误入歧途,但最终解决方案完全符合我的要求,是在spex库中实现的,作为方法序列.该方法可以迭代一系列动态长度,并根据应用程序的业务逻辑创建promise.
后来我把它变成了一个供大家使用的共享库.
我想用一个INSERT查询插入多行,例如:
INSERT INTO tmp(col_a,col_b) VALUES('a1','b1'),('a2','b2')...
Run Code Online (Sandbox Code Playgroud)
有没有办法轻松地做到这一点,最好是这样的对象数组:
[{col_a:'a1',col_b:'b1'},{col_a:'a2',col_b:'b2'}]
Run Code Online (Sandbox Code Playgroud)
我可能最终在一个块中有500条记录,因此运行多个查询是不可取的.
到目前为止,我只能为一个对象做到这一点:
INSERT INTO tmp(col_a,col_b) VALUES(${col_a},${col_b})
Run Code Online (Sandbox Code Playgroud)
作为一个附带问题:使用${}符号的插入是否可以防止SQL注入?
我正在构建一个使用pg-promise模块连接到postgres数据库的快速应用程序.
我想确保启动应用程序服务器时数据库连接成功.换句话说,如果与数据库的连接失败,我想抛出一个错误.
我的server.js文件如下:
const express = require("express");
const databaseConfig= {
"host": "localhost",
"port": 5432,
"database": "library_app",
"user": "postgres"
};
const pgp = require("pg-promise")({});
const db = pgp(databaseConfig);
const app = express();
const port = 5000;
app.listen(port, (err) => {
console.log(`running server on port: ${port}`);
});
Run Code Online (Sandbox Code Playgroud)
无论数据库连接是否有效,当前配置都将启动快速服务器,这不是我想要的行为.
我尝试浏览文档但找不到解决方案.我也试过了const db = pgp(databaseConfig).catch((err) => { // blow up });,但那不行,因为pgp没有回复承诺.
我正在尝试通过更改和测试变量的值来实现我的代码在不同Node.js环境中正常工作的测试NODE_ENV.
我坚持的是,试图理解为什么以下代码:
process.env.NODE_ENV = undefined;
var test = process.env.NODE_ENV || 'empty';
console.log(test);
Run Code Online (Sandbox Code Playgroud)
输出undefined而不是empty.
这是我在这里缺少的一些JavaScript或Node.js功能吗?
在Node.js版本下测试:0.10.47,4.6.1和6.9.1
作为这个具体案例的解决方法,我必须做以下事情:
delete process.env.NODE_ENV; // now it is undefined
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个非常标准的任务:当发生异常时,重定向到我的/error页面.
在简化形式中,代码如下所示:
app.factory('$exceptionHandler', ['$location', function($location) {
return function(exception, cause) {
$location.path("/error");
};
}]);
Run Code Online (Sandbox Code Playgroud)
但是,AngularJS抱怨: 发现循环依赖:$ location < - $ exceptionHandler < - $ rootScope
这看起来像是一个基本限制,不允许$location在处理异常时使用.
但是我们还能怎么做呢?
我正在使用Observable来为来自全局资源的客户端提供事件订阅界面,并且我需要根据活动订阅的数量来管理该资源:
RXJS中监视活动订阅数的正确方法是什么?
如何在RXJS语法中实现以下内容?--
const myEvent: Observable<any> = new Observable();
myEvent.onSubscription((newCount: number, prevCount: number) => {
if(newCount === 0) {
// release global resource
} else {
// allocate global resource, if not yet allocated
}
// for a scalable resource usage / load,
// re-configure it, based on newCount
});
Run Code Online (Sandbox Code Playgroud)
我不希望在每次更改时都得到保证的通知,因此newCount+ prevCount参数。
更新1
这是不是重复到这个,因为我需要时通知用户数量的变化,而不是只在某个时刻拿到专柜。
更新2
到目前为止,没有任何答案,我很快提出了一个非常丑陋且有限的解决方法,它是通过完全封装(特别是针对type)进行的Subject。希望能找到合适的解决方案。
更新3
经过几个回答,我仍然不确定如何实现我正在尝试的方法,如下所示:
class CustomType {
}
class CountedObservable<T> extends Observable<T> …Run Code Online (Sandbox Code Playgroud) 我有一个场景,我需要插入多个记录.我有一个像id(它是来自其他表的fk),key(char),value(char)的表结构.需要保存的输入将是上述数据的数组.示例:我有一些数组对象,如:
lst = [];
obj = {};
obj.id= 123;
obj.key = 'somekey';
obj.value = '1234';
lst.push(obj);
obj = {};
obj.id= 123;
obj.key = 'somekey1';
obj.value = '12345';
lst.push(obj);Run Code Online (Sandbox Code Playgroud)
在MS SQL中,我会创建TVP并通过它.我不知道如何在postgres中实现.所以我现在要做的是使用pg-promise库在postgres sql的单个查询中保存列表中的所有项目.我无法从文档中找到任何文档/理解.任何帮助赞赏.谢谢.
我对包含类型列的表有这个简单的查询bigint.
但是当我查询它时,pg-promise将此列的值作为字符串返回.我在文档中找不到相关信息.这是标准行为吗?
var ids = [180, 120];
db.any('SELECT id_brand, brand from catalog_brand WHERE id_brand in ($1:csv)', [ids])
.then((data) => {
// return results
});
Run Code Online (Sandbox Code Playgroud)
data 采用以下形式,id为string而不是int:
[{id_brand: "180", brand: "Ford"}, {id_brand: "120", brand: "Nike"}]
Run Code Online (Sandbox Code Playgroud)
有没有什么可以指示pg-promise返回实际类型?
是否有任何描述PostgreSQL服务器遵循的元组格式的文档?官方文件似乎对此很神秘.
单个元组似乎很容易弄明白,但是当涉及元组数组,复合元组数组,以及最后嵌套的复合元组数组时,仅通过查看输出就无法确定格式.
在我最初尝试实现pg-tuple(一个今天仍然缺少的解析器)之后,我要问这个能够解析Node.js中的PostgreSQL元组
例子
create type type_A as (
a int,
b text
);
Run Code Online (Sandbox Code Playgroud)
(1,hello)(1,"hello world!")create type type_B as (
c type_A,
d type_A[]
);
Run Code Online (Sandbox Code Playgroud)
简单值数组: {"(2,two)","(3,three)"}
因为type_B[]我们可以得到:
{"(\"(7,inner)\",\"{\"\"(88,eight-1)\"\",\"\"(99,nine-2)\"\"}\")","(\"(77,inner)\",\"{\"\"(888,eight-3)\"\",\"\"(999,nine-4)\"\"}\")"}
对于复合类型的多维数组,它变得更加复杂.
UPDATE
由于感觉根本就没有规格,我已经开始致力于逆转它了.不确定它是否可以完全完成,因为从一些初始示例中通常不清楚应用了哪些格式规则.
在GitHub上有什么特别的markdown语法来支持隐藏文本吗?
我只是想README.md为自己做一些待办事项,而不是可见.
node.js ×6
pg-promise ×4
postgresql ×4
javascript ×2
angularjs ×1
dependencies ×1
express ×1
github ×1
markdown ×1
promise ×1
rxjs ×1
tuples ×1
typescript ×1