我不明白诺言。我知道Promise是可以成功完成也可以错误完成的对象。promises可以很好地执行异步函数,也可以通过then
连接其他异步函数。promise的结果作为参数传递给最后执行的promise的then
方法中的回调函数(如果promise以正确的方式结束)。
这个例子不起作用。我正在模拟一个通过setTimeout的异步调用。我的函数返回一个整数。我期望在prom2
考试中得到5分。为什么不起作用?我做错了什么?为什么?
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
。
发布于 2018-10-19 07:10:42
Promise.resolve
所做的就是接受一个表达式,并将其转换为一个立即解析为该表达式的Promise
。如果表达式是Promise
以外的任何类型的普通值(原语、数组、对象等),则Promise.resolve
返回的Promise
仍将立即解析。您的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));
如果您已经有一个值(同步地),并且希望将其转换为可以调用.then
的Promise
,那么就应该使用Promise.resolve
。例如,在下面的代码中,通过使用Promise.resolve('begin')
作为累加器的初始值,可以使用reduce
构造一个简单的Promise
链
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');
});
https://stackoverflow.com/questions/52883753
复制相似问题