首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在重新获取之前,createResource错误会在设置之前未定义

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

Stack Overflow用户
提问于 2022-05-29 18:12:14
回答 1查看 403关注 0票数 0

我想为一个error显示createResource属性。

在本例中,为什么在抛出之前将error设置为未定义。

它在获取undefined之前记录line error的错误。

代码语言:javascript
复制
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"));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-29 19:38:10

因为createResource返回一个资源,资源的初始值始终是undefined,并且一直保持为undefined,直到从提取函数返回的承诺用值解决为止:

代码语言:javascript
复制
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只在下一个勾选之后才接收错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72426146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档