Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Promise.reject()返回的值不同于Promise.resolve()?_Javascript_Promise_Es6 Promise - Fatal编程技术网

Javascript Promise.reject()返回的值不同于Promise.resolve()?

Javascript Promise.reject()返回的值不同于Promise.resolve()?,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我很难弄清楚Promise.reject()如何返回其值 常量属性数据={ id:1, propertyName:“京都车站附近的1BR日式包房” } 函数handleClick(e){ getData() 。然后(数据=>{ console.log(data.id,data.propertyName);//->1,“京都车站附近的1BR日式私人房间” }) .catch(错误=>{ console.log(err.message);//->“无法获取数据”。如果它只是“err”,则返回对象。

我很难弄清楚
Promise.reject()
如何返回其值

常量属性数据={
id:1,
propertyName:“京都车站附近的1BR日式包房”
}
函数handleClick(e){
getData()
。然后(数据=>{
console.log(data.id,data.propertyName);//->1,“京都车站附近的1BR日式私人房间”
})
.catch(错误=>{
console.log(err.message);//->“无法获取数据”。如果它只是“err”,则返回对象。
})
}
函数getData(){
返回fetchData()
。然后(结果=>{
如果(结果、成功){
返回Promise.resolve(result.propertyData);
}否则{
返回承诺.拒绝(结果.消息);
}
})
}
函数fetchData(){
返回新承诺((解决、拒绝)=>{
设rand=Math.floor(Math.random()*11)
设置超时(()=>{
如果(rand>=3&&rand
常量属性数据={
id:1,
propertyName:“京都车站附近的1BR日式包房”,
};
函数handleClick(e){
fetchData()
。然后((数据)=>{
//我们正在解析具有属性的对象
//1.成功
//2.propertyData(在第1行声明)
//例如,访问那些
//-data.success或-data.propertyData
const{id,propertyName}=data.propertyData;//简单销毁data.propertyData;
log(id,propertyName);
})
.catch((错误)=>{
console.log(err.message);//->“无法获取数据”。如果它只是“err”,则返回对象。
});
}
函数fetchData(){
返回新承诺((解决、拒绝)=>{
设rand=Math.floor(Math.random()*11);
设置超时(()=>{
如果(rand>=3&&rand)}
//它可以是任何您想要的字符串、对象、布尔值w/e
解析({success:true,propertyData});
}否则{
//{这是.catch()中解析的值
//不一定是对象
//但如果只传递字符串,那么在.catch(err=>)中:err将是字符串
//在您的情况下,err将是带有“成功”和“消息”道具的对象
//要访问它们,请转到err.message或err.success
拒绝({success:false,消息:“未能获取数据。”});
}
}, 1000);
});
}

这里有很多代码。你能创建一个示例来演示这个问题吗?
fetchData
拒绝,它永远不会到达你的
。然后(结果=>{
在getData中。如果你想用
成功解决它:false
,请使用
resolve()
而不是
拒绝()
。即使我使用了
reject()
,我也能收到消息。当然你只需要捕捉它。谢谢你,我也捕捉到了它,但这并不是我被卡住的原因……也许resolve和reject会以不同的方式返回它的值/参数,尽管我无法解释。@Kaho这能回答你的问题吗?或者我应该删除它
const propertyData = {
  id: 1,
  propertyName: "1BR Japanese-style Private Room near Kyoto Station",
};

function handleClick(e) {
  fetchData()
    .then((data) => {
      // We are resolving Object with properties
      // 1. success
      // 2. propertyData (declared on line 1)
      // e.g. Accessing those
      //  - data.success OR - data.propertyData
      const { id, propertyName } = data.propertyData; // Simple destruction of data.propertyData;
      console.log(id, propertyName);
    })
    .catch((err) => {
      console.log(err.message); // -> 'Failed to fetch data.' if it's only 'err', it returns the object.
    });
}

function fetchData() {
  return new Promise((resolve, reject) => {
    let rand = Math.floor(Math.random() * 11);

    setTimeout(() => {
      if (rand >= 3 && rand <= 10) {
        //{ This is what will be the resolved data in .then(data => ) }
        // It can be anything you want string, Object, boolean w/e
        resolve({ success: true, propertyData });
      } else {
        //{ This is what will be the resolved value in .catch()
        // Does not necessarily have to be Object
        // But if you pass only string then in your .catch(err => )  : err here will be string
        // In your case err will be Object with props 'success' and 'message'
        // To access them u go err.message OR err.success
        reject({ success: false, message: "Failed to fetch data." });
      }
    }, 1000);
  });
}