簡體   English   中英

我如何“檢查”用戶是否使用承諾?

[英]How do I “check” if user use promise?

我想檢查是否從用戶調用.then() ,否則使函數同步,這是我函數的代碼

var fun = (ms, unit, asy) => {
  var second = 1000,
    minute = second * 60,
    hour = minute * 60,
    day = hour * 24,
    week = day * 7,
    month = week * 4,
    year = day * 365; // or 1000 * 60 * 60 * 24 * 7 * 4 * 12

  if ( asy ) {
    return new Promise(function (fulfill, reject){
      try {
        var converted;
        switch (unit) {
          case 'something': 
            // Do something
            break;
          case 'something_else' // etc etc
        }
        fulfill(converted)

      } catch (err) {
        reject(err)
      }
    });
  } else {
    switch (unit) {
     case 'something': 
        // Do something
        break;
     case 'something_else' // etc etc
     // ...
     }
    }
  }
}

現在,它檢查asy值是否為true,然后使其asynchronous但是(如果可能的話)我希望使其默認為synchronous ,只要用戶不調用.then()

這不能做,當then被稱為與否,已經執行的功能,所以你不能讓時光倒流。

可以在異步js編程中使用“經典”回調方式:

function doSomething(arg1, ... , callback)
{
   if(callback !== undefined) {
      // Do async way and resolve with the callback
   } else {
      // Do sync
   }
}

函數不可能知道返回后如何使用其返回值。 該函數已完成(盡管IO可能仍在后台運行)並在調用.then()時返回。

保持您的返回類型一致,並且如果操作可能是異步的,則始終返回Promise。 Promise .then()回調已規范化,因此無論Promise本身是同步還是異步解析,都可以保證執行順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM