为什么 createResource 错误在设置之前在重新获取时未定义

Why is createResource error gets undefined on a refetch before it is set

我想显示 error 属性 createResource

在这个例子中,为什么error在被抛出之前设置为undefined。

它在获取 line error

之前记录 undefined 错误
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"));

因为 createResource returns 资源和资源的初始值始终是 undefined 并保持 undefined 直到从 fetcher 函数返回的承诺与值:

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"));

即使传一个non-nullsourceSignal也是一样

promise 在事件循环的下一个滴答中解析为一个值,这就是为什么即使您立即抛出错误,它也不会立即解决错误。 Solid 的运行时同步执行。因此 data.error 仅在下一个订单号后收到错误。