簡體   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