我不了解承诺。我知道承诺是可以成功或错误完成的对象。并且promises可以很好地执行异步函数并通过串联其他异步函数then
。一个promise的结果作为参数传递给then
最后执行的promise方法内的回调函数(如果promise正确结束)。
这个例子不起作用。我正在通过setTimeout模拟异步调用。我的函数返回一个整数。我期望得到的结果是5 prom2
。为什么不起作用?我在做什么错,为什么?
var getProductId = function(){
setTimeout(function () {
return 5;
}, 1500);
};
var prom2 = Promise.resolve(getProductId);
prom2.then(function(result){
console.log("5 = " + result);
});
我也尝试过:
var getProductId = function(){
setTimeout(function () {
return 5;
}, 1500);
};
var prom2 = Promise.resolve(getProductId());
prom2.then(function(result){
console.log("5 = " + result);
});
注意:我想使用Promise.resolve
而不是new Promise
。
所有Promise.resolve
要做的就是获取一个表达式并将其转换为Promise
立即可解析为该表达式的表达式。如果表达式是任何类型的普通值(原始,数组,对象等)的其它比一个Promise
,然后Promise
通过返回Promise.resolve
仍然会立即解决。您的getProductId
函数未返回任何内容,因此您prom2
产生的结果Promise
立即解析为的值undefined
。
Promise.resolve
不会帮助您解决问题-您需要将回调转换为Promise
,并且唯一的方法是使用new Promise
构造函数:
console.log('start');
const getProductId = () => new Promise(res => setTimeout(res, 1500, 5));
getProductId().then(res => console.log(res));
使用时间Promise.resolve
是(如果已经)拥有一个值,并且想要将其转换为Promise
可以调用.then
的值。例如,通过Promise.resolve('begin')
在以下代码中将其用作累加器的初始值,Promise
可以使用以下方法构造一条简单的链reduce
:
const prom = ['foo', 'bar', 'baz']
.reduce((lastProm, str) => (
lastProm.then((lastStr) => {
console.log(lastStr);
return str;
})),
Promise.resolve('begin')
);
prom.then((lastStr) => {
console.log(lastStr);
console.log('end');
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句