[英]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
没有特殊含义 ,您可以为该参数使用任何名称。 例如,代替resolve
和reject
我们可以将它们称为setValue
和setError
:
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.