Javascript 为什么promise总是反复返回相同的数据?
我遇到了麻烦,似乎承诺是一个变量Javascript 为什么promise总是反复返回相同的数据?,javascript,ecmascript-6,async-await,promise,Javascript,Ecmascript 6,Async Await,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
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()))
如何像前面的示例那样使用常量变量解决此问题?在第一个示例中,您生成一个随机数一次,然后从“fun”promise函数返回相同的数。在第二个示例中,每次调用“fun”时,您都会生成一个新的随机数。。“如何像前面的示例一样使用常量变量解决此问题?”
你不能。如果使用常量变量,将得到常量结果。要得到不同的结果,您需要每次生成一个新的数字,如您给出的第二个示例所示。很简单,您必须仔细观察函数和变量是如何工作的
- 示例1:在
常量变量中,调用函数num
,该函数返回一个浮点值并将其存储为random()
值。 然后调用num
fun()
const num=Math.random()//新承诺(resolve=>resolve(num))
//现在,一次又一次地称之为乐趣,它给了我同样的结果
等待乐趣
等待乐趣
等待乐趣
- 示例2:再次调用
时,您将获得承诺中的解析值。但是,这一次不是来自变量的已初始化值。每次设置fun()
新承诺时,您都在调用
方法random()
constfun=()=>新承诺(解析=>
resolve(Math.random())//您不能通过使用常量变量来解决这个问题,因为常量的整点是它永远不会改变。您的用例是什么导致您无法使用第二种形式?是的,承诺会缓存您使用的值,但这不是您的问题fun()
确实像预期的那样为每个调用创建了一个新的承诺,只是您使用相同的常量num
值来解析它们。公平地说,您可以使用一个常量函数来调用Math.random()
函数并返回结果,而不是使用一个存储调用返回值的常量变量,但这在这里似乎是不必要的。我认为这要么是为了尝试承诺,要么这段代码不是您正在编写的完整/实际代码,只是以防万一:在这里使用承诺毫无意义Math.random()
不是异步的,因此您可以立即返回它的值。(但如果您希望它总是像这里一样解析为特定值,也可以使用Promise.resolve(Math.random())
)