3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
當(dāng)您返回Promise時(shí),您實(shí)際上并沒有返回Promise內(nèi)的內(nèi)容,而是Promise本身。當(dāng)你說
function api1 () {
return fetch1().then(v =>{
console.log("Api1", v);
return "B"
);
}
您說的是“console.log上一個(gè)Promise的結(jié)果,然后返回一個(gè)包含的新Promise B。
所以當(dāng)你打電話
api1().then(v => console.log("Api2 call", v));
原始的Promise(包含“ A”)已被使用,新的Promise包含您先前返回的字符串“ B”。
要獲得您想要的輸出,請像下面這樣重寫第二部分:
function api1 () {
return fetch1().then(v =>{
console.log("Api1", v);
return v;
);
}

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
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));
調(diào)用時(shí)api1().then(v => console.log("Api2 call", v));,api1()將等待fetch1中已解決的承諾被解析,這意味著vin theninapi1函數(shù)將等于'A',然后該then函數(shù)將'B'返回到下一個(gè),然后theninthen(v => console.log("Api2 call", v));的值v將等于' B'。我希望你明白!

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
如您所見,我將返回從fetch1返回的相同值
這實(shí)際上是不完全正確,你打電話then后fetch1。那確實(shí)有所作為。
使用同步,非承諾代碼幾乎是相同的。如果返回方法:
return sum(3,7).multiply(2);
您不僅會返回sum(3,7),因?yàn)橹竽鷷騺黼娫抦ultiply(2)。由于multiply通話,該號碼將返回20 。
與promise幾乎相同,例如:
const myResultPromise = return sumPromise(3,7).then(sumValue => {
return multiplyPromise(2);
})
在這里,這myResultPromise將是20的承諾,因?yàn)闀hen新的Promise附加到原始sumPromise。
添加回答
舉報(bào)