我想检查是否从用户调用.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()
。
答案 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本身是同步还是异步解析,都可以保证执行顺序。