为啥没有通过在 promise 中调用的函数内部的闭包来定义解析?

Posted

技术标签:

【中文标题】为啥没有通过在 promise 中调用的函数内部的闭包来定义解析?【英文标题】:Why is resolve not defined through closure inside a function called in a promise?为什么没有通过在 promise 中调用的函数内部的闭包来定义解析? 【发布时间】:2017-12-05 13:52:21 【问题描述】:

为什么resolve 没有通过下面代码中myFunction 内部的闭包来定义?

const myFunction = () => 
  resolve();


const p = new Promise((resolve) => 
  myFunction();


(node:1232) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: resolve is not defined

【问题讨论】:

resolve 在范围内定义。 myFunction 未在该范围内定义。这里没有什么特别的承诺;这就是作用域的工作原理。 你知道一种可以工作的编程语言吗? Resolve javascript Promise outside function scope的可能重复 【参考方案1】:

因为这不是 JavaScript 中作用域的工作方式。作用域是一个词法的东西,这意味着重要的不是调用/被调用环境之间的动态关系,而是代码的结构和声明的嵌套。

您当然可以将resolve 函数引用显式传递给另一个函数:

const myFunction = (resolve) => 
  resolve();


const p = new Promise((resolve) => 
  myFunction(resolve);
)

【讨论】:

是的,我知道词法作用域,但我错过了 myFunction2 是在 myFunction 之外定义的事实,因此在哪里调用它并不重要。现已澄清。

以上是关于为啥没有通过在 promise 中调用的函数内部的闭包来定义解析?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 useEffect 之外的函数被调用,而没有依赖数组的 useEffect 内部的函数却没有?

取代Promise的Generator生成器函数

Promise--相关的API

为啥在 Promise.all() 之后不调用 onRejected,其中包含在数组中的 Promise.reject() 传递给 Promise.all()?

为啥我在函数内部调用时会收到“错误:无效的挂钩调用”?

当循环在异步函数内部而不是相反时,为啥 Async/Await 可以正常工作?