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;
);
}
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'。我希望你明白!
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。
添加回答
舉報
