我正在尝试为博客平台创建一个构造函数,它内部有许多异步操作.这些包括从目录中获取帖子,解析它们,通过模板引擎发送它们等等.
所以我的问题是,让我的构造函数返回一个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项目中.
我正在尝试使用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)
我尝试过使用这个问题,但似乎没有帮助.这是除非我做错了.
我正在使用webpack将我的JavaScript代码保存在模块中,但是我在尝试加载Facebook JS SDK时遇到了问题.我尝试使用externals
webpack 的选项,但由于库是异步加载的,我认为它不会提供我想要的答案.
webpack存在一个解决此问题的问题.但是,我认为它不再适用.https://github.com/webpack/webpack/issues/367
这个问题的好方法是什么?我应该同步加载SDK吗?
是否有理由setSate()
在循环中调用会阻止它多次更新状态?
我有一个非常基本的jsbin,突出了我所看到的问题.有两个按钮.一个将状态计数器更新为1.另一个在循环中调用One的基础函数 - 这似乎会多次更新状态.
我知道这个问题的几个解决方案,但我想确保我首先理解这里的基础机制.为什么不能setState
在循环中调用?我是否笨拙地编码阻止了预期的效果?
我正在尝试构建一个 Traefik 动态配置,该配置具有用于"Host(app.localhost)"
开发但用于"Host(realname.com)"
生产的规则。我也在使用 Docker,但我认为这与我的问题无关。我的问题是:在我的动态配置中是否有使用环境变量的惯用方法?
文档提到了 Go 模板,但除此之外我不明白。实在是太缺乏了。我也考虑过类似envsubst 的东西,但希望不必安装其他工具。
我正在使用 Traefik 2.0+。此外,我必须使用文件提供程序,因为我在本地为 TLS 使用自签名证书。来自 Traefik 的文档:
在上面的示例中,我们使用文件提供程序来处理这些定义。这是配置证书(以及选项和存储)的唯一可用方法。但是,在 Kubernetes 中,证书可以而且必须由机密提供。
我创建了一个包含表单的自定义组件<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 …
我正在尝试从 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 命令。我是不是错过了什么。
我正在创建一些非常简单的 Docker 容器。我知道在每一步之后都会创建一个新容器。但是,当使用 Hub 中的其他 Dockerfile 时,我不会得到未标记的图像。那么它们来自哪里呢?在网上浏览之后,我发现了如何删除它们,但我想更好地了解它们的来源。理想情况下,我想阻止它们被创建。
从他们的文档
这将显示未标记的图像,即图像树的叶子(不是中间层)。当新构建的图像将 repo:tag 与 IMAGE ID 分开时,就会出现这些图像,而使其未标记。如果在容器当前正在使用图像时尝试删除图像,则会发出警告。通过拥有这个标志,它允许批量清理。
我不太明白这一点。为什么构建会repo:tag
从 IMAGE ID 中删除?
javascript ×4
docker ×3
node.js ×2
angular ×1
architecture ×1
constructor ×1
dockerhub ×1
facebook ×1
git ×1
nginx ×1
promise ×1
reactjs ×1
traefik ×1
vim ×1
webpack ×1