[英]Return values from SetTimeout function ( Promise.Then())
在下面的代碼中,值從排隊的 Promise.then() 鏈中正確返回。
代碼:
let cond_1 = true;
let data = 'Data Received....';
let err = 'Error';
var p1 = new Promise(function(resolve,reject){
if(cond_1){
resolve(data);
}else{
reject(err); }})
p1.then((data)=>{console.log(data);return 'Wait....';})
.then((val1)=>{console.log(val1); return 'Finished';})
.then((val2)=>{console.log(val2)})
.catch((err)=>{console.log(err)});
Output:
Data Received....
Wait....
Finished
但是,來自鏈式SetTimeout function的相同 RETURNED 值返回“UNDEFINED”。
代碼:
p1.then((data)=>{console.log(data); return 'Wait.....'; })
.then((val1)=>{setTimeout(function(val1){console.log(val1); return 'Finished';},1000)})
.then((val2)=>{setTimeout(function(val2){console.log(val2);},1000)})
.catch((err)=>{console.log(err)});
Output:
Data Received....
undefined
undefined
如何解決這個問題?
嘗試利用 Javascript 的字典序性質。
與其制作函數在 setTimeout 中采用的 function v1、v2,不如使用箭頭 function。這樣,您使用的是從 promise 返回的 v1、v2。
做這個
let cond_1 = true;
let data = 'Data Received....';
let err = 'Error';
var p1 = new Promise(function(resolve, reject) {
if (cond_1) {
resolve(data);
} else {
reject(err);
}
})
p1.then((data) => {
console.log(data);
return 'Wait.....';
})
.then((val1) => {
setTimeout(() => {
console.log(val1);
}, 1000);
return 'Finished';
})
.then((val2) => {
return setTimeout(() => {
console.log(val2)
}, 1000)
})
.catch((err) => {
console.log(err)
});
你所做的是為你的 function 創建了一個新變量 v1,v2。你只能在你在 function 中傳遞值 v1,v2 時使用它。function 不會像你期望的那樣使用從 promise 返回的 v1,v2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.