小编ada*_*eck的帖子

让构造函数返回Promise是不好的做法吗?

我正在尝试为博客平台创建一个构造函数,它内部有许多异步操作.这些包括从目录中获取帖子,解析它们,通过模板引擎发送它们等等.

所以我的问题是,让我的构造函数返回一个promise而不是它们调用的函数的对象是不明智的new.

例如:

var engine = new Engine({path: '/path/to/posts'}).then(function (eng) {
   // allow user to interact with the newly created engine object inside 'then'
   engine.showPostsOnOnePage();
});
Run Code Online (Sandbox Code Playgroud)

现在,用户可能还没有提供补充Promise链链接:

var engine = new Engine({path: '/path/to/posts'});

// ERROR
// engine will not be available as an Engine object here
Run Code Online (Sandbox Code Playgroud)

这可能会造成问题,因为用户可能会感到困惑,为什么 engine 在施工后无法使用.

在构造函数中使用Promise的原因是有道理的.我希望整个博客在构建阶段后正常运行.然而,在呼叫之后,它似乎几乎无法立即访问该对象new.

我一直在争论使用的东西,engine.start().then()或者engine.init()会返回Promise.但那些看起来也很臭.

编辑:这是在Node.js项目中.

javascript architecture constructor node.js promise

150
推荐指数
3
解决办法
4万
查看次数

如何使用nginx docker容器访问localhost上的服务器?

我正在尝试使用dockerized版本的nginx作为我的节点(ExpressJS)应用程序的代理服务器.没有任何配置到nginx和发布容器的端口80,我能够看到默认的nginx登陆页面.所以我知道这很有用.

现在我可以挂载包含配置的启用站点的目录proxy_pass localhost:3000.我的节点应用程序在本地运行(不在任何Docker容器中),我可以通过端口3000(即localhost:3000)访问它.但是,我假设在nginx容器运行,映射到端口80,并代理我的localhost:3000,我将能够看到我非常简单的(hello world)应用程序.相反,我收到502.

我需要把东西传递给码头工人吗?这可能是nginx配置错误吗?这是我的nginx配置:

server {
  listen 0.0.0.0:80;
  server_name localhost;

  location / {
    proxy_pass http://localhost:3000;
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用这个问题,但似乎没有帮助.这是除非我做错了.

nginx node.js docker

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

在模块中使用Facebook JS SDK(webpack)

我正在使用webpack将我的JavaScript代码保存在模块中,但是我在尝试加载Facebook JS SDK时遇到了问题.我尝试使用externalswebpack 的选项,但由于库是异步加载的,我认为它不会提供我想要的答案.

webpack存在一个解决此问题的问题.但是,我认为它不再适用.https://github.com/webpack/webpack/issues/367

这个问题的好方法是什么?我应该同步加载SDK吗?

javascript facebook webpack

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

在循环中调用setState仅更新状态1次

是否有理由setSate()在循环中调用会阻止它多次更新状态?

我有一个非常基本的jsbin,突出了我所看到的问题.有两个按钮.一个将状态计数器更新为1.另一个在循环中调用One的基础函数 - 这似乎会多次更新状态.

我知道这个问题的几个解决方案,但我想确保我首先理解这里的基础机制.为什么不能setState在循环中调用?我是否笨拙地编码阻止了预期的效果?

javascript reactjs

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

在 Traefik 动态配置中使用环境变量

我正在尝试构建一个 Traefik 动态配置,该配置具有用于"Host(app.localhost)"开发但用于"Host(realname.com)"生产的规则。我也在使用 Docker,但我认为这与我的问题无关。我的问题是:在我的动态配置中是否有使用环境变量的惯用方法?

文档提到了 Go 模板,但除此之外我不明白。实在是太缺乏了。我也考虑过类似envsubst 的东西,但希望不必安装其他工具。

我正在使用 Traefik 2.0+。此外,我必须使用文件提供程序,因为我在本地为 TLS 使用自签名证书。来自 Traefik 的文档:

在上面的示例中,我们使用文件提供程序来处理这些定义。这是配置证书(以及选项和存储)的唯一可用方法。但是,在 Kubernetes 中,证书可以而且必须由机密提供。

docker traefik

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

使用依赖 ViewChildren 的属性时出错

我创建了一个包含表单的自定义组件<address></address>。我有一个父组件,其中包含以下数组:

@ViewChildren(AddressComponent) addressComponents: QueryList<AddressComponent>;
Run Code Online (Sandbox Code Playgroud)

因此,父级可以包含这些元素的集合,并且用户可以根据他们将输入的地址数量添加和删除它们。

家长还有一个按钮可以在用户输入所有所需的地址后继续。但是,该<address>组件必须正确填写<address>,因此我在该组件上有一个公共 getter :

get valid(): boolen {
  return this._form.valid;
}
Run Code Online (Sandbox Code Playgroud)

回到父级上的按钮。<address>如果任何组件无效,则需要禁用它。所以我写了以下内容:

get allValid() {
   return this.addressComponents && this.addressComponents.toArray().every(component => component.valid);
}
Run Code Online (Sandbox Code Playgroud)

模板中:

<button [disabled]="!allValid" (click)="nextPage()">Proceed</button>
Run Code Online (Sandbox Code Playgroud)

但 Angular 不喜欢这样,因为addressComponents直到生命周期事件才在父级中定义ngAfterViewInit。由于它立即运行,ngOnViewInit()我得到了导致错误的表达式检查的两个不同值。(至少我认为是这样)。

如何在模板中使用依赖于 的属性ngAfterViewInit?或者告诉我的父母其所有孩子都是有效的最好方法是什么?

错误消息

检查后表情发生了变化。以前的值:“假”。当前值:“真”

更新

所以我console.log编辑了 的返回值allValid并第一次注意到它是undefined。这是预料之中的,this.addressComponents直到。这是下一个日志,这令人惊讶,因为我的页面上还没有任何组件。我正在父组件中使用模拟数据(尽管全部有效)来创建组件。我确实了解到(在空数组上返回 true)。所以对 的第三次调用正在返回。我再次感到有点惊讶,因为我的所有数据都是有效的。在第四条日志中,它返回了,这正是我所期望的。所以我假设返回的最终值是 Angular 不喜欢的。undefined …

javascript angular2-forms angular2-template angular

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

vim cd'ing 到 git root

我正在尝试从 vim cd 到我项目的 git root 中,以便我的 Ctrl-P 正常工作。我经常在项目中工作,我希望 Ctrl-P 查找 git root,所以我将它设置为仅查找最近的文件夹,并带有.gitignore.

在命令行上,我可以执行类似的操作,cd $(git rev-parse --show-toplevel)但是当我在 vim 中尝试相同的操作时,:!cd $(git rev-parse --show-toplevel)它会隐藏 vim 并仅显示空白输出。有人告诉我!在 vim 命令行中将允许我运行 bash 命令。我是不是错过了什么。

git vim

4
推荐指数
2
解决办法
994
查看次数

未标记的 Docker 镜像从何而来?

我正在创建一些非常简单的 Docker 容器。我知道在每一步之后都会创建一个新容器。但是,当使用 Hub 中的其他 Dockerfile 时,我不会得到未标记的图像。那么它们来自哪里呢?在网上浏览之后,我发现了如何删除它们,但我想更好地了解它们的来源。理想情况下,我想阻止它们被创建。

从他们的文档

这将显示未标记的图像,即图像树的叶子(不是中间层)。当新构建的图像将 repo:tag 与 IMAGE ID 分开时,就会出现这些图像,而使其未标记。如果在容器当前正在使用图像时尝试删除图像,则会发出警告。通过拥有这个标志,它允许批量清理。

我不太明白这一点。为什么构建会repo:tag从 IMAGE ID 中删除?

docker dockerhub

3
推荐指数
2
解决办法
1334
查看次数