西瓜

文章 评论 浏览 32

西瓜 2022-05-04 13:57:22

@sisterAn 规范里好像没提到 await 内部实现了 generator, 如果从 polyfill 中的实现去断定 await 内部就是 generator……这样好像有点不严谨……
另外 await 的例子其实可以转换为

var a = 0
var b = () => {
  var temp = a;
  Promise.resolve(10)
    .then((r) => {
      a = temp + r;
    })
    .then(() => {
      console.log('2', a)
    })
}
b()
a++
console.log('1', a)

我尝试以下代码片段,按照您这样模拟是行不通的,不太理解为什么我这样写async里面输出就是 11:

let a = 0
let b = async () => {
  let c = await 10
  a = a + c
  console.log('2', a) // 2 11
}
b()
a++
console.log('1', a) // 1 1 
let a = 0
let b = async () => {
  let tmp = a
  let c = await 10
  a = tmp + c
  console.log('2', a) // 2 10
}
b()
a++
console.log('1', a) // 1 1

上一个console,a++之后的,变成1了;下一个console,tmp存的是a++之前的,值为0

第 12 题:JS 异步解决方案的发展历程以及优缺点

西瓜 2022-05-03 16:57:44

@neal1991 不是啊。你可以状态提升,或者使用 context,或者用 订阅,redux 等都可以。比如组件层级是
A1 包含 B1 和 B2,B 分别是 C1 和 C2。如果想要 C1 和 C2 通信,你可以把 state 定义到 A 中,这属于变量提升,风险就是如果再有和 A1 同层级的 A2 ,下面一个组件想和 C1 通信,state 可能就要重新改动,提升到 A1 和 A2 的 container。另外 Context 也是可以的啊,只不过层级太深会有一定的风险,我们通常用它作注入(provider)的一种方式 ,而不是 state 变化做通知的。所以还是要结合场景的啊,直接上状态管理库可能不用想太多,很少出现一些项目复杂后的问题,但是有时候是不必要的。

React 组件之间的通信

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文