我使用es6 async await语法有这个非常令人困惑的代码片段.我期望发生的是该进程await永远挂起,因为从不调用resolve函数.然而,实际发生的是输出"start"然后进程退出而没有更多的输出.
const simple = async () => {
console.log('start')
await new Promise(resolve => {})
console.log('done.')
}
simple()
Run Code Online (Sandbox Code Playgroud)
但是,下面的代码将打印"开始",等待1秒,然后打印"完成".
const simple = async () => {
console.log('start')
await new Promise(resolve => setTimeout(resolve, 1000))
console.log('done.')
}
simple()
Run Code Online (Sandbox Code Playgroud)
我对这意味着什么(没有任何证据)的最接近的猜测是,当节点在等待承诺时,它会跟踪代码中发生的活动事件,当没有其他事情发生时,它就会退出.有人可以解释为什么代码退出这里?
赛跑 node v8.7.0
我有一个库,我想在发布到 npm 之前在本地进行完整安装来测试它。我想测试的一件事是所有依赖项是否都是项目的一部分。由于nodejs如何构建其模块系统,(在每个目录级别搜索nodejs模块)我没有一个好的方法来确保我需要的模块来自当前文件夹的node_modules,而不是父文件夹的node_modules 。
这是项目结构:
library-folder/
package.json
node_modules/
testing/integration/
package.json
node_modules/
test-install.js
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以告诉nodejs只需要当前目录中的模块,并忽略任何父目录。
我需要将可读流通过管道传输到缓冲区(要转换为字符串)和文件中。流来自node-fetch.
NodeJS 流有两种状态:暂停和流动。据我了解,一旦'data'附加了侦听器,流就会更改为流动模式。我想确保我读取流的方式不会丢失任何字节。
方法 1:管道并读取'data':
fetch(url).then(
response =>
new Promise(resolve => {
const buffers = []
const dest = fs.createWriteStream(filename)
response.body.pipe(dest)
response.body.on('data', chunk => buffers.push(chunk))
dest.on('close', () => resolve(Buffer.concat(buffers).toString())
})
)
Run Code Online (Sandbox Code Playgroud)
方法2:使用直通流:
const { PassThrough } = require('stream')
fetch(url).then(
response =>
new Promise(resolve => {
const buffers = []
const dest = fs.createWriteStream(filename)
const forFile = new PassThrough()
const forBuffer = new PassThrough()
response.body.pipe(forFile).pipe(dest)
response.body.pipe(forBuffer)
forBuffer.on('data', chunk => buffers.push(chunk))
dest.on('close', () => resolve(Buffer.concat(buffers).toString())
}) …Run Code Online (Sandbox Code Playgroud) 我正在创建一个TranslationPipe角度2,该角度将字符串作为输入并从a获取转换TranslationService并将其返回到视图。例如:
<div>{{ 'hello world' | translate }}</div>
成为:
hej verden
我想要一种方法来更改视图的语言,并更新页面上的所有文本,而无需重新加载整个页面。有没有一种方法可以触发TranslationPipe页面上所有s甚至应用程序中所有管道的重新加载?
通常,触发管道角度的唯一方法是更改传递给它的变量。尽管输入是字符串,所以我需要手动触发触发器。
存储所有翻译文本的文本对象存储在服务中,因此我知道另一种解决方案是这样做,
<div> translationObject['hello world'] </div>
但对设计人员而言可读性较差。
我想要javascripts在scala中解构的能力。考虑 js 中的一个对象和 scala 中的一个 case 类。如果我只想要对象/案例类的第一个和最后一个属性,那么在 Scala 中我需要列出所有属性,否则我会收到编译错误。
在 Scala 案例类解构(据我所知)是使用unapply方法定位的
case class ABC(a: Int, b: Int, c: Int)
val obj = ABC(1,2,3)
// deconstruction
val (a, _, c) = obj
Run Code Online (Sandbox Code Playgroud)
而在javascript中它的属性名称
const obj = { a: 1, b: 2, c: 3 }
const { a, c } = obj
// or
const { a: attrA, c: attrC } = obj
// scala deconstruction is essentially javascript array deconstruction
const arr = [1,2,3]
const [ first, _, …Run Code Online (Sandbox Code Playgroud) javascript ×3
node.js ×3
angular ×1
angularjs ×1
node-fetch ×1
node-modules ×1
promise ×1
scala ×1
stream ×1