繁体   English   中英

您可以为Promises定义解析功能吗?

[英]Can you define a resolve function for Promises?

我正在跟上Promises的发展步伐,但是有一件事我不明白。

因此,我们这样定义一个Promise:

new Promise( /* executor */ function(resolve, reject) { ... } );

我的印象是, resolve是成功解决情况后应调用的函数。 所以我试图做这样的事情:

function resolve(number) {
  return number * 2;
}

var p = new Promise((resolve, reject) => {
  setTimeout(() => resolve(5), 1000);
});

p.then((doubledNumber) => {
  console.log(doubledNumber); // expected: 10, actual: 5
});

所以看来resolve不是通常意义上的函数,它更像是return之类的关键字。 换句话说,当我调用resolve ,我只是指示程序传递我提供的任何值作为resolve的arg。

我的理解正确吗?

这种理解不是很正确。 您定义的resolve函数未使用。 调用resolve(5) ,您使用的是Promise构造函数作为参数提供的resolve函数。 名称resolve没有特殊含义 ,您可以为该参数使用任何名称。 例如,代替resolvereject我们可以将它们称为setValuesetError

var p = new Promise((setValue, setError) => {
  setTimeout(() => setValue(5), 1000);
});

您可以在此处看到为什么本地定义的resolve遮盖了您定义的称为resolve的函数的原因。

仅由您调用Promise构造函数提供的resolve()函数,以为Promise提供值。

如果要修改Promise产生的值,则需要使用.then(...)应用过滤功能(这会为您提供一个带有修改后值的新Promise):

function doubleResult(x) {
  return x * 2;
}

var doubleP = p.then(doubleResult);
doubleP.then((doubledNumber) => {
  console.log(doubledNumber);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM