小编and*_*ais的帖子

当Promise永远无法解决时会发生什么?

我使用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

javascript node.js promise

10
推荐指数
2
解决办法
3186
查看次数

运行忽略父node_modules的Nodejs程序

我有一个库,我想在发布到 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.js node-modules

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

将 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)

stream node.js node-fetch

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

在不改变输入的情况下触发管道重新加载

我正在创建一个TranslationPipe角度2,该角度将字符串作为输入并从a获取转换TranslationService并将其返回到视图。例如:

<div>{{ 'hello world' | translate }}</div>
成为:
hej verden

我想要一种方法来更改视图的语言,并更新页面上的所有文本,而无需重新加载整个页面。有没有一种方法可以触发TranslationPipe页面上所有s甚至应用程序中所有管道的重新加载?

通常,触发管道角度的唯一方法是更改​​传递给它的变量。尽管输入是字符串,所以我需要手动触发触发器。

存储所有翻译文本的文本对象存储在服务中,因此我知道另一种解决方案是这样做, <div> translationObject['hello world'] </div> 但对设计人员而言可读性较差。

javascript angularjs angular

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

Scala 像 javascript 对象一样解构

我想要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 scala

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