這個問題在這里已經有了答案: 如何從異步呼叫回傳回應 (42 個回答) 如何訪問承諾的價值? (13 個回答) 6 天前關閉。
我目前正在學習異步 JavaScript,我對如何通過我的代碼承諾回傳值感到困惑:
let p = Promise.resolve("Passed")
let x = p.then(msg=>msg).catch(msg=>msg)
setTimeout(()=>console.log(x), 2)
console.log(x)
輸出:
Promise { <pending> }
Promise { 'Passed' }
如何獲取.then函式回傳的字串“Passed” ,以及為什么即使 Promise 已解決,promise 仍處于掛起狀態?但是當我們console.log使用一個setTimeout函式它的值是給出它的值,以及如何"Passed"從Promise { 'Passed' }
uj5u.com熱心網友回復:
你現在無法得到承諾之外的回應。要解決您可以使用兩種方法:
在 then 內部使用一個新函式訂閱,該函式獲取承諾結果 // 但它會像這樣異步
var p = Promise.resolve([1,2,3]);
p.then(function(v) {
console.log(v[0]); // 1
});
第二個是:使用帶有等待結構的異步函式
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 1000)
});
let result = await promise; // in this part it will be wait until promise will end its work
alert(result); // "done!"
}
f();
uj5u.com熱心網友回復:
您打算以這種方式使用承諾:
p.then((x) => {
console.log(x);
});
或這種方式(僅適用于異步函式):
x = await p;
通常, p 實際上是一個回傳承諾的函式,如下所示:
function p() {
return new Promise((resolve, reject) => {
resolve("message");
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368501.html
標籤:javascript 异步 承诺 es6-promise
