if语句中的速记承诺不能按预期工作

时间:2018-09-10 23:51:06

标签: javascript angular typescript

我有一个if语句。

if(!(this._lf.getItem('test').then(result => result))) {
    console.log(null);
} else {
    console.log('Yay');
}

但是我似乎无法正常工作...

如果我用console.log这样记录getItem的结果

this._lf.getItem('te').then(result => console.log(result));

我返回null,

但是如果我这样做

console.log(this._lf.getItem('te').then(result => result);

我拿回了这个物体...

ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value: 
Array(0)}
__zone_symbol__state: true
__zone_symbol__value: null
__proto__: Object

我不确定我在做什么错吗?

我最近从作为脱机数据存储的localStorage切换到localForage,并且在localStorage中,可以通过执行以下操作轻松检查键是否为空。

if(!localStorage.getItem('key')) {
    // do something
}

所以我只是想在这里做类似的事情

任何帮助将不胜感激!

谢谢

1 个答案:

答案 0 :(得分:3)

由于getItem返回Promise,因此无法立即检查其值。您可以将其放在async函数中,以便可以在await内将if的值:

if(!await this._lf.getItem('test')) {
  console.log(null);
} else {
  console.log('Yay');
}

或者,您可以使用条件运算符来减少重复次数:

console.log(
  await this._lf.getItem('test')
  ? 'Yay'
  : null
);

请注意,.then(result => result);根本不执行任何操作-您可以完全忽略它。