我正在将我的承诺链接代码重构为异步/等待风格。这样做的原因之一是我想要一个 catch 块来处理所有错误情况(如此处所述Understanding Promise Rejection in Node.js)
我的问题是,当我遇到同步错误时,我应该致电await Promise.reject还是throw error退出该过程?我知道这两种方式都可以,但我更喜欢throw error。我已经知道我得到的结果无效,为什么还要等待?使用 throw 立即终止控制流似乎是更好的选择。
我不是在谈论承诺链(我的问题的全部要点),所以我不认为线程JavaScript Promises -reject vs. throw回答了我的问题。
我读过《Node.js 中的错误处理》一文,我认为它也没有给出答案。但它确实说了
给定的函数应该同步(使用 throw)或异步(使用回调或事件发射器)传递操作错误,但不能同时传递。...一般来说,使用 throw 并期望调用者使用 try/catch 的情况非常罕见...
我的异步函数可能会返回 Promise.reject。因此,我关心的是介绍两种传递错误的方法,正如该文章所反对的那样。
try {
let result = await aysncFunc().
if (!isResultValid(result)) { //isResultValid() is sync function
await Promise.reject('invalid result')
//or throw 'invalid result'
}
... //further processing
}
catch (error) {
...
}
Run Code Online (Sandbox Code Playgroud) 我原以为Unicode61 Tokenizer可以支持 CJK --中文 日语 韩语\n我验证我的 sqlite 支持 fts5
\n\nsqlite> pragma compile_options;\nBUG_COMPATIBLE_20160819\nCOMPILER=clang-9.0.0\nDEFAULT_CACHE_SIZE=2000\nDEFAULT_CKPTFULLFSYNC\nDEFAULT_JOURNAL_SIZE_LIMIT=32768\nDEFAULT_PAGE_SIZE=4096\nDEFAULT_SYNCHRONOUS=2\nDEFAULT_WAL_SYNCHRONOUS=1\nENABLE_API_ARMOR\nENABLE_COLUMN_METADATA\nENABLE_DBSTAT_VTAB\nENABLE_FTS3\nENABLE_FTS3_PARENTHESIS\nENABLE_FTS3_TOKENIZER\nENABLE_FTS4\nENABLE_FTS5\nRun Code Online (Sandbox Code Playgroud)\n\n但令我惊讶的是它根本找不到任何中日韩单词。这是为什么 ?
\n\nsqlite> CREATE VIRTUAL TABLE ft5_test USING fts5(content, tokenize = \'porter unicode61 remove_diacritics 1\');\nsqlite> INSERT INTO ft5_test values(\'\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe6\x94\xaf\xe6\x8c\x81\xe4\xb8\xad\xe6\x96\x87 fts5 does not seem to work for chinese\');\nsqlite> select * from ft5_test where ft5_test = \'\xe4\xb8\xad\xe6\x96\x87\';\nsqlite>\nsqlite> select * from ft5_test where ft5_test = \'Chinese\';\n\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe6\x94\xaf\xe6\x8c\x81\xe4\xb8\xad\xe6\x96\x87 fts5 does not seem to work for chinese\nRun Code Online (Sandbox Code Playgroud)\n\n- - - - - - - 更新 - …
因此,http直播可让您将实时视频发送到iOS设备,但iOS设备如何将实时音频/视频发送回服务器?他们也可以使用http直播吗?例如,对于像webex或facetime这样的视频会议应用,iOS设备如何将音频/视频发送回服务器?
当然有iOS API让你打电话应用程序,但我想在幕后发生什么,特别是可以用HLS发送流回服务器?
谢谢!
尽管socket.io文档说“ 粘性会话 ”可以使socket.io与节点群集一起工作。我只是无法使其工作。
我找到了PM2几个问题开了反对的话,最接近的解决方案,我能找到的是这个,“力只使用websock选项”,在所有不使用粘性会话。
有没有人有过使节点群集与socket.io兼容的经验?
-------更新--------
我检查了这里提到的其他两个粘性会话实现,sticky-session与socket.io-sticky-session节点js库!哪个更好?,找到“粘性群集”即可完成工作。
我学到的另一个教训是,粘性会话不适用于pm2集群,例如,从https://github.com/uqee/sticky-cluster/issues/26进行确认。因此,在使用socket.io时,请勿使用pm2集群模式(或仅使用“ websocket”传输)。
socket.io文档中提到的“粘性会话”实现实际上也可以工作。如果有人需要有关代码示例的更多说明,请在此处检查https://github.com/elad/node-cluster-socket.io!
我的问题待解决,因为我仍然想看看是否还有其他输入。
我现在正在学习docker。我想弄清楚Docker 标签可以解决什么样的问题。
我可以理解为什么在 Dockerfile 中使用 label,例如添加与构建相关的元数据,但我仍然不明白为什么在 docker-compose.yml 中使用它?使用标签与环境有什么区别?我假设会有不同的用例,但我就是想不通。
有人能给我一些实际的例子吗?
谢谢
我看到那些javascript前端构建工具,例如webpack,时不时地使用“编译”这个词。我不确定编译 javascript 代码到底意味着什么,至少不像编译 c/c++ 代码。
我想我总体上理解“构建”过程,比如将所有 js 代码捆绑到一个大文件中,缩小/丑化代码,使用 babel 转换 ES6 语法(transpile)。但是编译在这里意味着什么,它如何适应整个构建过程,或者它只是整个构建过程的另一个名称?
目前,我认为这可能只是使用 Babel 转换 ES6 语法的另一个名称。
附言。读完这篇文章后,SO Babel 是编译器还是转译器?我相信我的问题与此不一样。因为它不仅仅与巴布尔有关。例如,webpack 还使用术语编译器https://webpack.js.org/api/compiler/ 我不明白它的含义!
Browserify 也使用编译器,例如https://github.com/robrichard/browserify-compile-templates “在 browserify 转换中将 HTML 脚本标签中的下划线模板编译为 CommonJS”
对于初学者来说,我的问题与从 gitlab 私有存储库安装 npm 模块不同
我们维护自己的 npm 模块,每个模块都在自己的子文件夹中,并一起组成一个存储库,例如 my_node_modules.git,那么是否可以从中安装单个 npm 模块,即是否有一个我可以使用的命令/工具
npm i -S git+ssh://git@mydomain/path/my_node_modules.git/ A_module /
npm i -S git+ssh://git@mydomain/path/my_node_modules.git/ B_module /
如果不是,我必须安装那个单独的私有模块还有什么其他解决方案?
- - 更新 - -
经过一些研究后,我发现我并不孤单。
所以 npm 反对,https://github.com/npm/npm/issues/2974
纱线正在考虑,https://github.com/yarnpkg/yarn/issues/4725
我真的不喜欢这里的想法npm install package from github repo subfolder,postinstall sript
我正在考虑使用 git 子树。我在这里留下我的问题,看看是否有人可以提出一些想法。
我阅读了一些Docker 和 Node.js 最佳实践文章,例如https://github.com/nodejs/docker-node/blob/main/docs/BestPractices.md或使用 Docker 容器化 Node.js Web 应用程序的 10 个最佳实践,或者Node 和 NPM 的 Dockerfile 良好实践。所有这些文章至少是在 2021 年写或更新的,我不列出 2021 年之前写的文章,但也有不少。
\n他们都反对CMD ["npm", "run", "start"]。主要原因是 npm 会吞掉SIGTERM 和 SIGINT 等退出信号,因此我的节点应用程序中的正常关闭代码将无法运行。
我猜旧的 npm 就是这种情况(虽然我没有测试它),但我已经测试了 node14+npm6 和 node16+npm8,我可以验证 npm6/8 不会吞下这些事件和我的优雅关闭代码正在运行。不确定这是否是因为 npm 修复了它。
\n因此,唯一的问题仍然是还有 1 个进程 npm 需要运行,即 NPM 作为PID 1运行。一些文章说问题是“PID 1 不会响应 SIGINT”,但据我证实,情况并非如此。
\n许多文章(例如这个nodejs文档)建议只是,CMD [ "node", "server.js" ]但也在https://github.com/nodejs/docker-node/blob/main/docs/BestPractices.md#handling-kernel-signals …
对于简单的情况,if let或者guard我没有看到优势,
if case let x? = someOptional where ... {
...
}
//I don't see the advantage over the original if let
if let x = someOptional where ... {
...
}
Run Code Online (Sandbox Code Playgroud)
对于for-case-let简化使用可选集合的情况,我真的希望swift可以更进一步:
for case let x? in optionalArray {
...
}
//Wouldn't it be better if we could just write
for let x? in optionalArray {
...
}
Run Code Online (Sandbox Code Playgroud)
谷歌一段时间之后我认为唯一有用的案例是" Swift 2模式匹配:解开多个选项 ":
switch (username, password) {
case let (username?, password?):
print("Success!")
case …Run Code Online (Sandbox Code Playgroud)