在函数中包装promise并在变量中声明它之间的区别

时间:2018-01-01 12:19:45

标签: javascript ecmascript-6 es6-promise

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

所以我不应该使用这个

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

并且更好地使用此

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

有人可以用实际的方式详细说明这个建议究竟是什么意思吗?

1 个答案:

答案 0 :(得分:3)

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

创建承诺

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

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

创建一个返回promise

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

在第二种情况下,somePromise不是承诺而是功能。您必须调用该函数并捕获其返回值(promise)以操纵promise。目前没有承诺。

以下是如何通过调用您的函数获得承诺:

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

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