为啥没有通过在 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.all() 之后不调用 onRejected,其中包含在数组中的 Promise.reject() 传递给 Promise.all()?