[英]Resolving promise data
考慮以下代碼片段,
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控制台表示為“ two”(解決“ two”)。
但奇怪的是,i)控制台res為“一個”,ii)控制台res為“兩個”
i) two().then(function(res){
console.log(res);
});
ii) three().then(function(res){
console.log(res);
});
有人可以解釋為什么它會這樣。
因為您返回PRM。 那是一個承諾,會回報一個。 返回語句為“ two”的地方,此return語句用於它所調用的函數,這意味着.then語句中的回調。
它不會影響承諾本身。 您只是在two()方法中使用了一個promise(來自one()),並按原樣返回了它。
在第二個和第三個函數中,您還應該返回等待另一個Promise
並解決其響應的新Promise
,如下所示:
function two(){
return new Promise((resolve,reject) => {
one().then(() => resolve("two"));
});
}
在兩個作用,PRM變量實際上並沒有當它是由函數返回的更新。
在這行之后直接var prm = one();
跳轉到該行return prm;
因為它不希望現在從諾言中獲得數據。
但是,在其他三個函數中,您將返回promise,因此結果如您所願彈出。
要使兩個獲得與三個相同的結果,請添加async和await
async function two(){
var prm = one();
await prm.then(function(res){
prm = "two";
});
return prm;
}
嘗試修改此功能:
function two(){
var prm = one();
prm.then(function(res){
return "two";
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.