使用promise.all返回承诺

时间:2017-09-26 05:28:55

标签: javascript promise

我有两个函数可以解析一个promise,另一个第三个常量只是一个整数。在这里,我尝试document.querySelector('.a').addEventListener('click', handler); function handler(e){ console.log(e.target); //either .b or img or p depending on where I click } 以便返回已解决的承诺。

$('.a').on('click', '.b', function(){
   //code
});

我的问题是,因为第3个常量只是一个整数而且不能解析一个promise,它是如何包含在结果中的。我得到的结果是Promise.all

2 个答案:

答案 0 :(得分:2)

如果迭代对象中传递给Promise的任何项不是Promise的实例,它将被忽略并使用then方法传递给Promise.resolve结果。简洁,它将自动解决。

来自Documentation

  

如果iterable包含非promise值,它们将被忽略,但是   仍然计入返回的promise数组值(如果是promise   完成):

答案 1 :(得分:0)

在Promose.all(...)中,如果iterables是非承诺值,那么结果将是

  • 默认情况下解决或
  • 结果将根据承诺价值推断

这3个例子将清楚说明

// resolved by default

let a = 100;
let b = 200;

Promise.all([a,b]).then(function(){
    console.log("Promised Resolved");
});

从结果推断 - 已解决

// Resolved here
Promise.all([a,b, Promise.resolve("R-Text")]).then(function{
   console.log("R-Test Promise Resolved...");
}).catch(function(text){
   console.log("R-Test Promise Rejected...", text);
});

并从结果推断 - 拒绝

  // Rejected here
    Promise.all([a,b, Promise.resolve("R-Text"), Promise.reject("Rejected")]).then(function{
       console.log("R-Test Promise Resolved...");
    }).catch(function(text){
       console.log("R-Test Promise Rejected...", text);
});