Javascript fetch函数返回promise而不是object

Javascript fetch函数返回promise而不是object,javascript,promise,Javascript,Promise,我在functions.js中有一个函数getData,当我在另一个文件中调用scripts.js时,它返回的不是对象 //------ functions.js ------ export async function getData(arg1,arg2,arg3) { ... let result = await fetch(proxyUrl + targetUrl, requestOptions) .then(response => response.json())

我在
functions.js
中有一个函数
getData
,当我在另一个文件中调用
scripts.js
时,它返回的不是对象

//------ functions.js ------

export async function getData(arg1,arg2,arg3) {

...

let result = await fetch(proxyUrl + targetUrl, requestOptions)
    .then(response => response.json())
    .catch(error => console.log('error', error));

return result
    }
当我这样打电话时,我得到一个承诺:

//------ scripts.js ------

import {getData} from './functions';

let result = getData(arg1,arg2,arg3)
console.log(result)
但即使我这样打电话,我也会出错:

//------ scripts.js ------

import {getData} from './functions';

let result = awiat getData(arg1,arg2,arg3)
console.log(result)

“未捕获的语法错误:意外保留字”

getData
是一个
async
函数,返回一个
Promise
并且只允许在
async
函数中使用

export async function getData(arg1,arg2,arg3) {
  try {
    const response = await fetch(proxyUrl + targetUrl, requestOptions)
    return await response.json()
  } catch(err) {
    console.log(err)
    throw err
  }
}
还是这样

import { getData } from './functions';

const print = async () => {
  const result = await getData(arg1,arg2,arg3)
  console.log(result)
}

print()


异步
函数中使用try/catch块和实际的
return
语句,而不是使用
.then()
.catch()
显式地基于承诺的代码:

export async function getData(proxyUrl, targetUrl, requestOptions) {
    try {
        let response = await fetch(proxyUrl + targetUrl, requestOptions);
        return response.json();
    } catch (error) {
        console.log('error', error);
    }
}
当然,这个函数仍然返回一个承诺。每个
async
函数都会执行。承诺永远不会消失,
异步
/
等待
只会隐藏它们。这是语法糖。这一点很重要:您不能从异步函数返回值,,再多的语法糖分也不能改变这一事实

因此,当您调用它时,可以在另一个
async
函数中等待它

async function main() { 
    var data = await getData(...);
}
或者在常规函数中使用承诺语义:

function main() { 
    getData(...).then(data => ...);
}

对于第一个代码段,这里有一个输入错误
awiat
-->let result=awiat getData(arg1、arg2、arg3),应该是这样的,结果不是一个对象,而是一个承诺。在第二种情况下,我认为awiat只是一个打字错误?如果您有
wait
,这只允许在异步函数中使用。实际上,我不想打印对象,我想将其另存为对象。这里,我想将getData函数的输出保存在result中。所以我以后可以用它。实际上我不想打印这个对象,我想把它另存为一个对象。这里,我想将getData函数的输出保存在result中。所以我以后可以使用它。@DSaad不确定您指的是什么。我回答中的代码不会“打印”对象。你还没有真正读过我写的东西。
function main() { 
    getData(...).then(data => ...);
}