首页 > 解决方案 > 解析承诺数据

问题描述

考虑下面的代码片段,

function one(){
    var prm = new Promise(function(resolve,reject){
        resolve("one");
    });
    prm.customKey = function(){
    }
    return prm;
}
function two(){
    var prm = one();
    prm.then(function(res){
        return "two";
    });
    return prm;
}
function three(){
    return one().then(function(res){
        return "two";
    });
}

我希望下面的两个将 res 控制台为“两个”(解决“两个”)。

但奇怪的是 i) 控制台 res 为“一”,ii) 控制台 res 为“二”

i) two().then(function(res){
       console.log(res);
   });

ii) three().then(function(res){
       console.log(res);
    });

有人可以解释为什么它会这样。

标签: javascriptes6-promise

解决方案


因为你返回 prm。这是一个承诺,一个回报。返回“两个”的地方,此返回语句用于调用它的函数,这意味着 .then 语句中的回调。

它不会影响承诺本身。您只是在 two() 方法中使用了一个 promise(来自 one()),并按原样返回它。


推荐阅读