在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js setTimeout 中怎么返回值

js setTimeout 中怎么返回值

clipboard.png
由于DOM加載問題,需要異步后才能獲取到DOM的屬性, 但是我需要返回這個判斷, 怎么寫才能返回出去判斷后的值;
代碼如下,現(xiàn)在是不行的

 checkOver(item){
        let check = false;
          setTimeout(() => {
            check = $('#dept' + item.department_id)[0].offsetWidth < $('#dept' + item.department_id)[0].scrollWidth;
            return check;
          }, 1)
      }
回答
編輯回答
野橘

callback回調(diào)或者用promise封裝都是可以達到效果的?;蛘叨x一個全局變量,賦值。不過這樣沒有前兩個方案好。

2017年5月14日 17:30
編輯回答
貓小柒

DOM加載后執(zhí)行 在mounted 或者 $nextTrick執(zhí)行就好了 不需要用定時器吧

2017年5月2日 20:26
編輯回答
筱饞貓

promise包裝一下

2018年4月4日 00:17
編輯回答
神曲

setTimeout是異步運行的,返回不出去,可以用回調(diào)函數(shù)做自己想要的處理

2018年3月30日 05:24
編輯回答
青黛色

setTimeOut沒有直接值的返回途徑,你只能采用其他方法:

  1. 如果支持ES6/7 ,可以采用promise包裝,直接處理為異步執(zhí)行
  2. 如果不支持這些特性,你需要在setTimeOut的執(zhí)行具體函數(shù)中去檢查相關(guān)變量,自己通過回調(diào),或者其他觸發(fā)調(diào)用方式在函數(shù)執(zhí)行中解決值同步問題。

不過看你語句,是支持新特性的,可能你需要清理一下你的思路,采用promise包裝來進行了。

2017年6月19日 07:08
編輯回答
心上人

在setTimeout中你是拿不到返回值的,你可以用Promise來wrap一下。

function checkOver(item) {
   let check = false;
   let promise = new Promise(function(resolve, reject) {
     setTimeout(() => {
       check = $('#dept' + item.department_id)[0].offsetWidth < $('#dept' + item.department_id)[0].scrollWidth;
       resolve(check);
     }, 1);
   });
   return promise;
}

checkOver(item).then((check) => {
  console.log(check); // --> true/false
});
2017年10月7日 17:40
編輯回答
短嘆

異步返回不出去的
關(guān)于異步常用兩種方式 callback和promise
callback回調(diào):

checkOver(item,callback){
    let check = false;
    setTimeout(() => {
        check = $('#dept' + item.department_id)[0].offsetWidth < $('#dept' + item.department_id)[0].scrollWidth;
        callback&&callback(check)
    }, 1)
}
//調(diào)用
checkOver(item,function(check){
    console.log(check)
})
2017年6月22日 11:21
編輯回答
避風港

用promise或者async/await。

2017年6月21日 13:57
編輯回答
萌二代

等等,你們說了這么多難道沒想過用$(document).ready()

2018年2月4日 06:06