为什么我得到Promise而不是价值?

时间:2019-07-01 16:03:20

标签: javascript promise

我认为我不明白,为什么我得到回报?我需要创建对象。从promise返回值的两个选项都不起作用。

为什么会这样?我想念什么?

解决方案:在t()中创建变量。然后(res => {const myVar = {...}})

// a.js
exports.t = (key, lang, props) => {
    return i18next.changeLanguage(lang).then(t => {
        return t(key, props);
    });
};

// b.js
import {t} from './a.js'
const myVar = {
  a: "a",
  b: "b",
  c: (()=>{
     switch (template) {
       case 'a':
         // Promise should return value here from t();
       default:
         break; 
     }
  })(),
  d: (async () => {
     switch (template) {
       case 'a':
         // Not working, returns Promise... Why?
         return await t('email.Registration Confirmation', lng);
       default:
         break; 
     }
  })(),
  e: (()=>{
     switch (template) {
       case 'a':
         // Not working, returns Promise... Why?
         return t('email.Registration Confirmation', lng).then(res => {
           return res;
         });
       default:
         break; 
     }
  })()
}

JS是否完全有可能等待该Promise解析,然后完成创建对象?

1 个答案:

答案 0 :(得分:5)

asyncawait是通过允许您使用async函数内部看似非同步的语法来 management 的诺言的工具。

因此,async函数将总是返回承诺(当其中所有的承诺都解决时,它将解析为返回值是什么)。


您对case 'Register':之后的函数有误。它返回一个承诺。您没有代码来检查返回的内容。