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 => ...);
}