小编DaD*_*aDo的帖子

为什么我使用 wait Promise.all 会收到未处理的 Promise Rejection

这是我的代码的一般结构:

(async () => {
  try {
    const asyncActions = []

    for (let i = 0; i < 3; i++) {
      await new Promise((resolve, reject) => setTimeout(resolve, 1000))

      for (let j = 0; j < 3; j++) {
        asyncActions.push(new Promise((resolve, reject) => setTimeout(reject, 1000)))
      }
    }

    await Promise.all(asyncActions)
    console.log('all resolved')
  }
  catch (e) {
    console.log('caught error', e)
  }
})()
Run Code Online (Sandbox Code Playgroud)

我希望这能捕获 中发生的任何拒绝,asyncActions因为它们应该由 处理Promise.all(),但不知何故它们未被处理?控制台显示以下内容:

(node:9460) UnhandledPromiseRejectionWarning: undefined
(Use `node --trace-warnings ...` to show where the warning was created) …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js promise

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

动态 API 调用在 Nuxt.js 静态模式与 SSR 模式下如何工作?

即使在阅读了多篇解释静态渲染和 SSR 渲染之间差异的文章之后,我仍然不明白动态 API 调用在这些不同模式下是如何工作的。

我知道 Nuxt 有fetchasyncData钩子,它们在静态生成期间仅调用一次,但是如果我在组件方法内使用动态 HTTP 请求(例如,通过 POST 请求提交表单时)会怎样?这在静态网站中也有效吗?

我正在创建一个在大多数页面上显示用户生成的内容的网站,因此每次访问其中一个页面时我都必须发出 GET 请求以保持内容最新。我可以使用静态站点来做到这一点还是必须使用 SSR/其他东西?我不想使用客户端渲染(SPA 模式),因为它很慢并且不利于 SEO。那么我最好的选择是什么?

hosting http web-deployment vue.js nuxt.js

9
推荐指数
2
解决办法
5793
查看次数

如何使用联合类型深度扁平化 Typescript 接口并在键中保留完整的对象路径

假设我有以下界面:

interface Foo {
  foo: string
  bar?: number
  nested: {
    foo: string,
    deeplyNested: {
      bar?: number
    }
  }
  union: string | {
    foo: string,
    bar?: number
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要一种类型来将此接口转换为扁平版本,键中包含完整路径名,如下所示:

interface FooFlattened {
  foo: string
  bar?: number
  "nested.foo": string
  "nested.deeplyNested.bar"?: number

  // if union is a string:
  union: string

  // if union is an object:
  "union.foo": string
  "union.bar"?: number
}
Run Code Online (Sandbox Code Playgroud)

该类型应该适用于任何级别的嵌套和任何数量的联合成员。

我已经在这里找到了一个相关的问题,但这只是一个非常基本的界面,没有联合或可选参数。

typescript

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

你能返回一个带有预定义的finally的Promise吗?

我有一个返回 Promise 的函数。.then()当我在or块中使用完 Promise 后.catch(),我总是想执行相同的清理代码。我当前的设置是这样的:

const promiseWithFinally = () => {
  return new Promise((resolve, reject) => {
    // resolve or reject at some point
  }).finally(() => console.log('finally done'))
}

promiseWithFinally()
  .then(() => console.log('then done'))
  .catch(() => console.log('catch done'))
Run Code Online (Sandbox Code Playgroud)

我想要发生的是要么then donecatch done登录,然后再登录finally done。然而,它似乎以完全相反的顺序执行 - 当我在 5 秒超时后解析 Promise 时,finally done首先在 5 秒后记录,然后then done立即记录。

我做错了什么或者一般可以这样做吗?我知道我可以将 附加.finally()到每个单独的函数调用中,但由于它总是相同的,所以我想将它放在函数定义中。

javascript promise

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