函数中的promise和等于promise的var之间的Javascript差异

函数中的promise和等于promise的var之间的Javascript差异,javascript,promise,Javascript,Promise,我正在努力实现一些承诺,但对于以下两种使用承诺的方式之间的区别,我有点困惑: 第一种方法: function myfunction() { return new Promise((resolve, reject) => { // do stuff }); } 第二种方法: var myfunction = new Promise((resolve, reject) => { // do stuff }); 这两者有什么区别 在什么时候使用其中一种或另一种有优先权

我正在努力实现一些承诺,但对于以下两种使用承诺的方式之间的区别,我有点困惑:

第一种方法:

function myfunction() {
  return new Promise((resolve, reject) => {
    // do stuff
  });
}
第二种方法:

var myfunction = new Promise((resolve, reject) => {
 // do stuff
});
这两者有什么区别


在什么时候使用其中一种或另一种有优先权吗?

简而言之,您的两个示例就像比较这两种说法:

var x = 1; 

var x = function() { return 1;}
第一种方法定义一个变量并为其赋值。 第二种方法定义一个变量并为其分配一个函数。必须先调用该函数,然后才能执行任何操作或生成任何特定值


您的第一个代码示例:

function myfunction() {
  return new Promise((resolve, reject) => {
    // do stuff
  });
}
var myfunction = new Promise((resolve, reject) => {
 // do stuff
});
是一个创建并返回新承诺的函数。当它被调用时。在函数执行任何操作之前,必须先调用该函数。您展示的代码只是定义了一个函数,但实际上并没有运行任何东西
myfunction
是一个函数。要获得承诺,必须调用该函数,如下所示:

myfunction().then(...).catch(...)
您的第二个代码示例:

function myfunction() {
  return new Promise((resolve, reject) => {
    // do stuff
  });
}
var myfunction = new Promise((resolve, reject) => {
 // do stuff
});
创建一个新的承诺,并将承诺本身分配给变量
myfunction
。此代码运行后,
myfunction
将包含一个承诺

因此,在第一个示例中,
myfunction
是一个函数。在第二个示例中,
myfunction
是一个承诺

这两者有什么区别

如上所述,它们是用于不同目的的不同代码段

什么时候使用一个或另一个有偏好吗

这取决于你想做什么。如果您想定义一个可多次调用的可重用函数来创建承诺(可能跟踪某个异步操作),那么您将使用第一个函数,并在每次希望运行异步操作并收回承诺时调用它

如果您想(仅此一次)创建一个承诺并将其放入变量中,您可以使用第二个。为了不同的目的,不同的代码结构可以做不同的事情



请记住,promise只是一个普通的Javascript对象,用作跟踪和通知其他代码异步操作完成情况的通知系统。当您执行
newpromise()
时,只会创建一个新的Javascript对象。承诺只是简单的Javascript对象,带有一些方法和一些实例数据。他们没有观察任何东西的魔力。事实上,他们只会完全按照要求去做。有些人认为,他们不知何故自动知道内部的异步操作何时完成。他们没有。您必须手动挂接异步操作的完成操作,并手动调用
resolve(…)
reject(…)
。当您这样做时,承诺将通知所有安装了
的侦听器。然后(…)
。catch(…)

一个是承诺,另一个是函数。当你需要承诺时使用承诺,当你需要函数时使用函数。它们不能直接互换。一个是承诺,另一个将在调用时创建并返回承诺。
var-myfunction
是一个包含承诺的变量,因此如果在
promise中说
var-mypromise
(假设将var-mypromise更改为var-myfunction),可能就不会那么混乱了,我的承诺]
。。。在调用
myFunction()
之前,myFunction中的
do stuff
的差异不会被实现,而
myPromise
中的
do stuff
将在定义var时已经实现,这些
var x=1之间的相同差异
var x=function(){return 1;}
。您必须调用函数才能获得值。