我如何"检查"如果用户使用承诺?

时间:2017-01-04 18:41:07

标签: javascript node.js promise node-modules

我想检查是否从用户调用.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值是否为真,然后将其设为asynchronous但是(如果可能的话)我想将其设为synchronous作为默认值因为用户没有拨打.then()

2 个答案:

答案 0 :(得分:3)

这样做无法完成,当then被调用时,您的功能已经执行,因此您无法及时返回。

可以使用" classic"异步js编程中的回调方式:

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

答案 1 :(得分:2)

函数无法知道返回后如何使用其返回值。该函数已完成(尽管IO可能仍在后台运行)并且在调用.then()时返回。

保持您的返回类型一致,并且如果操作可能异步,则始终返回Promise。 Promise .then()回调被规范化,以便无论Promise本身是同步还是异步解析,都可以保证执行顺序。