简体   繁体   English

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

[英]Return values from SetTimeout function ( Promise.Then())

In the code below, Values are RETURNED correctly from a queued Promise.then() chain.在下面的代码中,值从排队的 Promise.then() 链中正确返回。

CODE:代码:

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: Output:

Data Received....
Wait....
Finished

However, the same RETURNED values from a chained SetTimeout function are returned 'UNDEFINED'.但是,来自链式SetTimeout function的相同 RETURNED 值返回“UNDEFINED”。

CODE:代码:

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: Output:

Data Received....
undefined
undefined

How to resolve this?如何解决这个问题?

Try taking advantage of Lexicographic nature of Javascript.尝试利用 Javascript 的字典序性质。

Instead of making a function v1,v2 which your functions takes within setTimeout, just use an arrow function. In this way you are using the v1,v2 returned from promise.与其制作函数在 setTimeout 中采用的 function v1、v2,不如使用箭头 function。这样,您使用的是从 promise 返回的 v1、v2。

Do this做这个

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)
  });

What you did was you created a new variable v1,v2 for your function. You can only use that when you pass value v1,v2 in that function. That function won't use v1,v2 returned from promise as you expect.你所做的是为你的 function 创建了一个新变量 v1,v2。你只能在你在 function 中传递值 v1,v2 时使用它。function 不会像你期望的那样使用从 promise 返回的 v1,v2。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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