将承诺包装在函数中与在变量中声明承诺之间的区别



在研究承诺时,我经常看到以下注释:您应该在函数中放置一个 promise,这样就不会立即调用它。

所以我不应该使用这个

var somePromise = new Promise(function(resolve, reject){...});

并更好地使用它

var somePromise = function(){
    return new Promise(function(resolve, reject){...});
};

有人可以以实际的方式详细说明这个建议的确切含义吗?

它没有太多内容:要么立即创建一个承诺,要么创建一个函数,该函数将在调用承诺时创建并返回承诺:

创建承诺

var somePromise = new Promise(function(resolve, reject){...});

在这里,您在当前上下文中创建了一个承诺,该承诺存储在somePromise变量中。您现在可以使用该承诺。

创建一个返回承诺的函数

var somePromise = function() {
    return new Promise(function(resolve, reject) {
        // ...
    });
}

在第二种情况下,somePromise不是一个承诺,而是一个函数。您必须调用该函数并捕获其返回值(承诺(以操纵承诺。目前没有创造任何承诺。

以下是通过调用函数获得承诺的方式:

var myPromise = somePromise(); // myPromise contains the returned promise

在第二种情况下,您可能希望将参数传递给somePromise函数,使其更加通用和可重用。

最新更新