繁体   English   中英

SetTimeout 的返回值 function ( Promise.Then())

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM