亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么從函數返回的promise解析為從.then返回的值

為什么從函數返回的promise解析為從.then返回的值

慕的地6264312 2021-04-07 17:19:16
我創建了一個返回承諾的函數。function fetch1 () { return new Promise((res, rej) => {  res("A"); });}我在函數api1中調用此函數,并返回從fetch1返回的promise。function api1 () { return fetch1().then(v =>{  console.log("Api1", v);  return "B" );}如您所見,我將返回從fetch1返回的相同值。我沒有創建任何新的Promise。但是當我稱呼它時,我得到以下輸出。api1().then(v => console.log("Api2 call", v));Api1 AApi2 call B我的預期輸出應該是Api1 AApi2 call A從此鏈接可以看到。然后,那個諾言就被束縛了。從第一個返回的諾言然后在接下來的第二個諾言中得到解決。但是我沒有從api1函數中返回任何承諾。我可以解決它。但是為什么會發生。
查看完整描述

3 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

當您返回Promise時,您實際上并沒有返回Promise內的內容,而是Promise本身。當你說


function api1 () {

 return fetch1().then(v =>{

  console.log("Api1", v);

  return "B"

 );

}

您說的是“console.log上一個Promise的結果,然后返回一個包含的新Promise B。


所以當你打電話


api1().then(v => console.log("Api2 call", v));

原始的Promise(包含“ A”)已被使用,新的Promise包含您先前返回的字符串“ B”。


要獲得您想要的輸出,請像下面這樣重寫第二部分:


function api1 () {

 return fetch1().then(v =>{

  console.log("Api1", v);

  return v;

 );

}


查看完整回答
反對 回復 2021-04-22
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

 function fetch1 () {

 return new Promise((res, rej) => {

  res("A");

 });

}


function api1 () {

 return fetch1().then(v =>{

  console.log("Api1", v);

  return "B"

 });

}


api1().then(v => console.log("Api2 call", v));

調用時api1().then(v => console.log("Api2 call", v));,api1()將等待fetch1中已解決的承諾被解析,這意味著vin theninapi1函數將等于'A',然后該then函數將'B'返回到下一個,然后theninthen(v => console.log("Api2 call", v));的值v將等于' B'。我希望你明白!


查看完整回答
反對 回復 2021-04-22
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

如您所見,我將返回從fetch1返回的相同值


這實際上是不完全正確,你打電話then后fetch1。那確實有所作為。


使用同步,非承諾代碼幾乎是相同的。如果返回方法:


return sum(3,7).multiply(2);


您不僅會返回sum(3,7),因為之后您會打來電話multiply(2)。由于multiply通話,該號碼將返回20 。


與promise幾乎相同,例如:


const myResultPromise = return sumPromise(3,7).then(sumValue => {

  return multiplyPromise(2);

})

在這里,這myResultPromise將是20的承諾,因為會將then新的Promise附加到原始sumPromise。


查看完整回答
反對 回復 2021-04-22
  • 3 回答
  • 0 關注
  • 316 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號