我想为一个error显示createResource属性。
在本例中,为什么在抛出之前将error设置为未定义。
它在获取undefined之前记录line error的错误。
import { render } from "solid-js/web";
import { For, createSignal, createResource, createEffect } from "solid-js";
const p_tau = async () => {
throw 'line error'
}
function Counter() {
let [s, setS] = createSignal()
let _r = createResource(s, _ => p_tau())
setInterval(() => {
setS(s() + 'h')
}, 1000)
createEffect(() => {
console.log(_r[0].error)
})
return (<>
</>)
}
render(() => <Counter />, document.getElementById("app"));发布于 2022-05-29 19:38:10
因为createResource返回一个资源,资源的初始值始终是undefined,并且一直保持为undefined,直到从提取函数返回的承诺用值解决为止:
import { createEffect, createResource, createSignal } from "solid-js";
import { render } from "solid-js/web";
const fetcher = async () => {
throw 'line error'
}
function Counter() {
let [s, setS] = createSignal(1);
let [data] = createResource(s, fetcher)
setInterval(() => {
setS(s => s + 1);
}, 1000)
createEffect(() => {
console.log(data(), data.error);
})
return (<>
</>)
}
render(() => <Counter />, document.getElementById("app"));即使您传递一个非空sourceSignal,它也是一样的。
这个承诺将在事件循环的下一个滴答中解析为一个值,这就是为什么即使您抛出一个即时错误,它也不会立即解决一个错误。Solid的运行时同步执行。因此,data.error只在下一个勾选之后才接收错误。
https://stackoverflow.com/questions/72426146
复制相似问题