小编vit*_*y-t的帖子

如何同步一系列承诺?

我有一个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.

后来我把它变成了一个供大家使用的共享库.

javascript promise

55
推荐指数
3
解决办法
5万
查看次数

具有pg-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注入?

postgresql node.js pg-promise

28
推荐指数
1
解决办法
2万
查看次数

启动应用程序时使用pg-promise验证数据库连接

我正在构建一个使用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没有回复承诺.

postgresql node.js express pg-promise

25
推荐指数
1
解决办法
1万
查看次数

为什么我不能将NODE_ENV设置为undefined?

我正在尝试通过更改和测试变量的值来实现我的代码在不同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)

javascript node.js

25
推荐指数
1
解决办法
2505
查看次数

来自$ exceptionHandler的$ location - 依赖冲突

我正在尝试实现一个非常标准的任务:当发生异常时,重定向到我的/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在处理异常时使用.

但是我们还能怎么做呢?

dependencies angularjs exceptionhandler

24
推荐指数
1
解决办法
3439
查看次数

如何监视RXJS订阅数?

我正在使用Observable来为来自全局资源的客户端提供事件订阅界面,并且我需要根据活动订阅的数量来管理该资源:

  • 订阅数大于0时分配全局资源
  • 订阅数变为0时释放全局资源
  • 根据订阅数调整资源使用策略

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)

node.js rxjs typescript

21
推荐指数
3
解决办法
749
查看次数

使用pg-promise插入多个记录

我有一个场景,我需要插入多个记录.我有一个像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的单个查询中保存列表中的所有项目.我无法从文档中找到任何文档/理解.任何帮助赞赏.谢谢.

postgresql node.js pg-promise

20
推荐指数
1
解决办法
9170
查看次数

pg-promise将整数作为字符串返回

我对包含类型列的表有这个简单的查询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返回实际类型?

node.js pg-promise

16
推荐指数
2
解决办法
4159
查看次数

PostgreSQL元组格式

是否有任何描述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

由于感觉根本就没有规格,我已经开始致力于逆转它了.不确定它是否可以完全完成,因为从一些初始示例中通常不清楚应用了哪些格式规则.

postgresql tuples composite-types node-postgres

15
推荐指数
1
解决办法
2327
查看次数

GitHub上隐藏的降价文本

在GitHub上有什么特别的markdown语法来支持隐藏文本吗?

我只是想README.md为自己做一些待办事项,而不是可见.

markdown github

15
推荐指数
2
解决办法
5273
查看次数