[問題] call api promise改成同步執行

作者: pthread (QQ)   2023-09-28 14:53:43
以下是程式碼片斷
變數sss要怎麼取得call API傳回來的值
在promise外的sss印出來還是空的,好像沒有同步
請教要如何改才會是同步的,謝謝
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>標題</title>
<script
src="https://code.jquery.com/jquery-3.7.0.min.js"
integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g="
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
$(function(){
console.log('開始');
var sss = "";
var pp = get("");
Promise.all([pp]).then(function(responseArray){
console.log(responseArray);
responseArray.forEach(function(response,index){
var seed = response.info.seed;
console.log(seed);
sss = seed;
console.log(sss);
});
});
console.log(sss);
});
function get(url) {
return new Promise(function(success,fail){
axios.get('https://randomuser.me/api/')
.then(function (response) {
// handle success
console.log(response);
var status = response.status;
console.log(status);
if(status=="200"){
return success(response.data);
}else{
return fail();
}
})
.catch(function (error) {
// handle error
console.log(error);
fail();
})
.finally(function () {
// always executed
});
});
}
</script>
</head>
<body>
</body>
</html>
作者: LPH66 (-6.2598534e+18f)   2023-09-29 07:50:00
Promise 本身就已經不是同步的了, 你要做的是在 then()裡面的函數裡 (那裡才有收到回應) 去做後續操作像是你這裡的 forEach 那樣, 寫在那個函數裡
作者: VdustR (京)   2023-10-06 22:07:00
感覺你需要的是 async await
作者: y3k (激流を制するは静水)   2022-01-02 16:10:00
await
作者: qoo02255 (qoo02255)   2022-05-19 21:40:00
var 已經不推薦使用很久了,容易有bug,換成let 比較好

Links booklink

Contact Us: admin [ a t ] ucptt.com