【发布时间】:2021-07-24 18:38:42
【问题描述】:
我遇到了麻烦,似乎 promise 是缓存变量。
const num = Math.random()
const fun = () => new Promise(resolve => resolve(num))
// Now, calling fun again and again, it gives me same result
await fun()
await fun()
await fun()
如果我像下面这样使用它。然后它按预期工作:
const fun = () => new Promise(resolve => resolve(Math.random()))
如何使用前面例子中的常量变量来解决这个问题?
【问题讨论】:
-
你不能通过使用常量变量来解决这个问题,因为常量的全部意义在于它永远不会改变。您有什么用例导致您无法使用第二种形式?
-
是的,promise 缓存了你解决它的值,但这不是你的问题。
fun()确实在每次调用时都会按预期创建一个新的承诺,只是您使用相同的 constantnum值解决所有这些问题。 -
公平地说,您可以使用一个常量 function 调用
Math.random()函数并返回结果,而不是使用常量 variable存储调用的返回,但这里似乎没有必要。 -
我认为这要么是为了尝试承诺,要么这个 sn-p 不是你正在制作的完整/实际代码,但以防万一:在这里使用 Promises 毫无意义.
Math.random()不是异步的,所以你可以立即返回它的值。 (但是如果您希望它始终像您在此处所做的那样解析为特定值,您也可以使用Promise.resolve(Math.random())。)
标签: javascript ecmascript-6 async-await promise