javascript - if 语句中的速记 promise 未按预期工作

标签 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 中,我可以通过执行类似的操作轻松检查 key 是否为空。

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

所以我只是想在这里做同样的事情

如有任何帮助,我们将不胜感激!

谢谢

最佳答案

因为 getItem 返回一个 Promise,所以您无法立即检查它的值。您可以将其放入 async 函数中,这样您就可以在 ifawait它的值:

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); 根本不执行任何操作 - 您可以完全忽略它。

关于javascript - if 语句中的速记 promise 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52266893/

相关文章:

javascript - Laravel 5.5 使用来自 Controller 的数据在 Blade View 中呈现 React 组件

javascript - 转置 JavaScript 数组和对象

javascript - 根据if语句显示div

javascript - 代理无法在扩展类中获取方法

node.js - 如何从 typescript 使用 npm 模块?

javascript - JQuery 元素加载/就绪事件

angular - 如何用 Angular CLI 替换 SCSS 文件?

javascript - Angular4 - 获取 "undefined"而不是下拉选择值

angular - 单元测试可注入(inject)服务

generics - 基元的特例泛型类型参数