小编abb*_*bbr的帖子

如何将异步函数调用包装到Node.js或Javascript中的同步函数中?

假设您维护一个公开函数的库getData.您的用户将其调用以获取实际数据:
var output = getData();
在引擎盖下,数据保存在文件中,因此您getData使用内置的Node.js 实现fs.readFileSync.很明显这两个getDatafs.readFileSync是同步的功能.有一天,您被告知要将基础数据源切换到MongoDB等只能异步访问的仓库.您还被告知要避免惹恼您的用户,getData不能更改API以仅返回承诺或要求回调参数.你如何满足这两个要求?

使用回调/保证的异步函数是JavasSript和Node.js的DNA.任何非平凡的JS应用程序都可能充满了这种编码风格.但这种做法很容易导致所谓的厄运金字塔回调.更糟糕的是,如果调用链中任何调用者中的任何代码都依赖于异步函数的结果,那么这些代码也必须包含在回调函数中,对调用者施加编码样式约束.我不时发现需要将异步功能(通常在第三方库中提供)封装到同步功能中,以避免大规模的全局重新分解.搜索关于此主题的解决方案通常最终得到Node Fibers或从中派生的npm包.但纤维无法解决我所面临的问题.甚至纤维作者提供的例子说明了这一缺陷:

...
Fiber(function() {
    console.log('wait... ' + new Date);
    sleep(1000);
    console.log('ok... ' + new Date);
}).run();
console.log('back in main');
Run Code Online (Sandbox Code Playgroud)

实际产量:

wait... Fri Jan 21 2011 22:42:04 GMT+0900 (JST)
back in main
ok... Fri Jan 21 2011 22:42:05 GMT+0900 (JST)
Run Code Online (Sandbox Code Playgroud)

如果函数Fiber确实将异步函数sleep转为同步,则输出应为:

wait... Fri Jan 21 2011 22:42:04 GMT+0900 (JST)
ok... Fri Jan 21 2011 22:42:05 GMT+0900 (JST)
back in …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous synchronous node.js node-fibers

114
推荐指数
3
解决办法
11万
查看次数

Webpack加载器中的RegEx exclude/include配置不起作用

我试图在我的应用程序之外应用于node_modulesbabel-loader的模块的特定模式,比如foo.*.

应该像往常一样跳过node_modules下的其他模块.首先我尝试使用负面预测不起作用:

{
  test: /\.js$/,
  exclude: [
    /node_modules\/(?!foo).*/
  ],
  loader: 'babel-loader',
  query: {
    ...
  }
}, 
Run Code Online (Sandbox Code Playgroud)

然后我分成两个装载机,也没有工作:

{
  test: /\.js$/,
  exclude: [
    path.resolve(_path, "node_modules")
  ],
  loader: 'babel-loader',
  query: {
    ...
  }
}, 
{
  test: /\.js$/,
  include: [
    /node_modules\/foo.*/
  ],
  loader: 'babel-loader',
  query: {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用字符串而不是RegEx,它适用于一个文件夹:

include: [
  path.resolve(_path, "node_modules/foo")
],
Run Code Online (Sandbox Code Playgroud)

这向我表明正则表达式没有按预期工作.

有没有人让RegExInclude/Exclude现场工作?

webpack

11
推荐指数
1
解决办法
7169
查看次数

Cypress - 等待按钮可点击

我知道它在大多数情况下都有效,但是在我测试的网页上,在以下行

cy.get('button[title="Query"]').click()
Run Code Online (Sandbox Code Playgroud)

赛普拉斯跑者超越了get,但坚持click行动直到暂停。如果我将代码修改为

cy.get('button[title="Query"]').as('query')
cy.wait(500)
cy.get('@query').click()
Run Code Online (Sandbox Code Playgroud)

测试成功。

显然,任意等待是一种不好的做法。自动等待、重试能力——正如赛普拉斯声称的功能一样,应该可以防止上述情况发生,但在我的例子中失败了。

此外,Cypress也没有任何should('be.clickable')断言。我如何指示 Cypress 在单击按钮之前等待按钮可单击,或者如果单击挂起,则间隔一段时间重试,直到成功?

cypress

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

使用 aws cli 时访问被拒绝,但在 Web 控制台中允许访问

我的 IAM 帐户至少有“管理员”权限。据我所知,我可以在 Web 控制台中执行所有操作。例如, aws gui

最近我下载了 aws-cli 并通过提供访问密钥、默认区域和输出格式快速配置了它。然后我尝试发出一些命令,发现其中大部分(但不是全部)都有权限问题。例如

$ aws --version
aws-cli/1.16.243 Python/3.7.4 Windows/10 botocore/1.12.233
$ aws s3 ls s3://test-bucket

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
$ aws ec2 describe-instances

An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation.
$ aws iam get-user
{
    "User": {
        "Path": "/",
        "UserName": "xxx@xxx.xxx",
        "UserId": "xxxxx",
        "Arn": "arn:aws:iam::nnnnnnnnnn:user/xxx@xxx.xxx",
        "CreateDate": "2019-08-21T17:09:25Z",
        "PasswordLastUsed": "2019-09-21T16:11:34Z"
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,使用访问密钥进行身份验证的 cli 与使用 MFA 进行身份验证的 …

aws-cli

6
推荐指数
2
解决办法
2644
查看次数

如何调试yeoman应用程序?

来自使用服务器端语言/平台(如java,python/django和php)开发Web应用程序的背景,我开始学习Node.js和yeoman.我认为能够调试服务器端代码是必不可少的,以提高代码质量.Node支持通过node-inspector和--debug选项进行调试.但是,如果使用生成器(例如AngularJS)使用生成器创建应用程序,并使用grunt启动,是否有一种简单的方法来启用调试?

也许我应首先要问的一个更高级别的问题是:如果yeoman推广(如教程中所述)AngularJS,它是一个客户端MVC框架,那么大多数代码将从浏览器而不是从Node运行.这就是为什么服务器端调试对于自耕农来说不再重要的原因,因此没有记录?

debugging node.js angularjs yeoman

5
推荐指数
2
解决办法
4308
查看次数

如何从浏览器隐藏流星服务器端代码?

作为流星的新手,我发现缺乏安全性是人们通常由于流星的历史性首次亮相而产生的第一印象之一,并且流星已经采取措施来解决这个问题.因此,在我学习的过程中,我更加关注这个主题.在关注待办事项列表教程时,我注意到,令我惊讶的if (Meteor.isServer) {}是,该块在浏览器中可见.该教程专门用了12个步骤中的2个步骤,将客户端代码移动到服务器端以使其安全.但是如果服务器端代码在浏览器中也可见,那不就是打败了整个目的吗?在这方面,流星怎么可能成为一个安全的平台?

security meteor

5
推荐指数
1
解决办法
1315
查看次数

反向JSON查询:查找与对象匹配的集合中的所有查询

我正在设计一个通用的通知订阅系统,用户可以根据MongoDB查询或更一般的json查询在订阅时指定复合规则.订阅数据存储在MongoDB集合中.例如,

{ "userId": 1, "rule": {"p1": "a"} }
{ "userId": 2, "rule": {"p1": "a", "p2": "b"} }
{ "userId": 3, "rule": {"p3": {$gt: 3} } }
Run Code Online (Sandbox Code Playgroud)

稍后当json对象形式的事件(如下所示)到达时,我想查找事件匹配的所有用户规则:

{"p1": "a", "p3": 4}
Run Code Online (Sandbox Code Playgroud)

上述事件应与示例中userId 1和3指定的规则匹配.事件对象不必存储在MongoDB中.

虽然我可以通过在应用层编写循环来满足要求.为了提高效率,我真的想在db层实现它,最好由于卷和延迟要求而允许分布式(分片)执行.

它可以实现吗?任何帮助表示赞赏.事实上,只要支持动态事件模式,我就可以使用其他NOSQL dbs,并且有一种指定复合规则的方法.

mongodb nosql mongodb-query

5
推荐指数
1
解决办法
920
查看次数

如何将HTML父元素的边界框适合CSS转换后的子元素?

是否有一种方法,最好不使用JS,使容器在下面的代码片段中包装缩放的,更通用的,转换后的子元素,即纯红外边框完全包含虚线蓝色边框?

顺便说一下,这似乎是一个浏览器错误,因为它违反了默认的盒子模型行为,父母的大小会自动调整为适合孩子.

#container {
  border: 1px solid red;
}

#scaled {
  border: 1px dashed blue;
  transform: scale(3, 3);
  transform-origin: 0 0;
}
Run Code Online (Sandbox Code Playgroud)
<div id="container">
  container
  <div id="scaled">
    scaled 3x
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

html javascript css css3 css-transforms

3
推荐指数
1
解决办法
1602
查看次数