[英]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.