这是我的代码的一般结构:
(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) 即使在阅读了多篇解释静态渲染和 SSR 渲染之间差异的文章之后,我仍然不明白动态 API 调用在这些不同模式下是如何工作的。
我知道 Nuxt 有fetch和asyncData钩子,它们在静态生成期间仅调用一次,但是如果我在组件方法内使用动态 HTTP 请求(例如,通过 POST 请求提交表单时)会怎样?这在静态网站中也有效吗?
我正在创建一个在大多数页面上显示用户生成的内容的网站,因此每次访问其中一个页面时我都必须发出 GET 请求以保持内容最新。我可以使用静态站点来做到这一点还是必须使用 SSR/其他东西?我不想使用客户端渲染(SPA 模式),因为它很慢并且不利于 SEO。那么我最好的选择是什么?
假设我有以下界面:
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)
该类型应该适用于任何级别的嵌套和任何数量的联合成员。
我已经在这里找到了一个相关的问题,但这只是一个非常基本的界面,没有联合或可选参数。
我有一个返回 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 done先catch done登录,然后再登录finally done。然而,它似乎以完全相反的顺序执行 - 当我在 5 秒超时后解析 Promise 时,finally done首先在 5 秒后记录,然后then done立即记录。
我做错了什么或者一般可以这样做吗?我知道我可以将 附加.finally()到每个单独的函数调用中,但由于它总是相同的,所以我想将它放在函数定义中。
javascript ×2
promise ×2
asynchronous ×1
hosting ×1
http ×1
node.js ×1
nuxt.js ×1
typescript ×1
vue.js ×1