Asynchronous 函数返回的异步/等待/赋值

Asynchronous 函数返回的异步/等待/赋值,asynchronous,async-await,es6-promise,ecmascript-5,Asynchronous,Async Await,Es6 Promise,Ecmascript 5,目前有一个简单的功能: async function getItem(id) { const item = await ... doing a bunch of time consuming stuff return item; } 来自同步语言,仍然从表面上理解异步/等待;我希望以下人员返回已解决的项目: const item = getItem('items-8'); console.log(item); // Just getting a promise 这个问题有点“装饰性”

目前有一个简单的功能:

async function getItem(id) {
  const item = await ... doing a bunch of time consuming stuff
  return item;
}
来自同步语言,仍然从表面上理解异步/等待;我希望以下人员返回已解决的项目:

const item = getItem('items-8');
console.log(item); // Just getting a promise
这个问题有点“装饰性”,但由于async/await解决了回调问题,所以我希望能做得更进一步,甚至避免使用这些东西


是否可以使用async/awaits获得这样一个线性变量赋值?语法/代码结构是什么?

async..await
是ES6承诺的语法糖,它允许以类似同步的方式编写异步代码。使用承诺的代码不能是同步的,因为承诺是异步的

为了以同步方式编写,使用
getItem
的代码也应该驻留在
async
函数中。如果它是顶级的,并且不驻留在另一个函数(如应用程序初始化代码)中,那么它可以驻留在
async
IIFE中

要么是

getItem('items-8').then(item => {
  ...
});


可能的副本。它涵盖了各种各样的东西,包括承诺和异步/等待。@estus如果我们坚持主要答案的标题,我们就有了
“ES2017+:承诺与异步/等待”
“ES2015+:承诺与然后()”
。让我感到困惑的是,
ES2017
部分的结尾是
“然后”
;然后,它应该被宣传为
“ES2017+,还有一点ES2015:Promissions with async/await/then”
。这或多或少就是为什么我要问这个问题,想知道是否可以使用一个线性模式来获得它,它不能发生在异步之外,对吗?我感到困惑,例如
异步函数returnValue(id){let item=await getItem(id);returnitem});let it=returnValue(“items-8”)
仍将返回承诺是的,它确实将返回承诺。是的,我们需要调用
async
函数中的
async
函数,以保持代码与no
then
s的同步。
// inside `async` function
const item = await getItem('items-8');
...