我不明白 promise 。我知道 Promises 是可以成功或错误完成的对象。并且 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
。
最佳答案
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
。然后Promise.resolve('begin')
作为累加器的初始值,可以使用 构造一个简单的
: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');
});
关于javascript - Promise.resolve - 意外的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883753/