Promise.resolve-意外结果

用户名

我不了解承诺。我知道承诺是可以成功或错误完成的对象。并且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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章