gpt4 book ai didi

javascript - js 异步/等待不工作

转载 作者:行者123 更新时间:2023-11-28 13:03:00 26 4
gpt4 key购买 nike

我正在尝试了解 async/await 以及如何使用它们。我正在遵循一些我见过的例子(我认为),但等待实际上并不是在等待ajax响应。这是代码:

async function doAjaxGet(ajaxurl) {
const result = await $.ajax({
url: ajaxurl,
type: 'GET',
datatype: "text",
});
return result;
}

$(document).ready(function () {
let json = doAjaxGet( "/static/imeiXref.json");
console.log('json: ', json);
processJSONData( json );
});


function processJSONData(data) {
console.log('Data: ', data);
Data = JSON.parse( data);

但是await关键字实际上并不是在等待结果返回。在控制台日志中我得到以下内容:

json:  Promise {<pending>}
Data: Promise {<pending>} controller.js:98
jQuery.Deferred exception: Unexpected token o in JSON at position 1 SyntaxError: Unexpected token o in JSON at position 1 jquery.min.js:2
at JSON.parse (<anonymous>)
at processJSONData (http://localhost:3000/js/controller.js:99:25)
at HTMLDocument.<anonymous> (http://localhost:3000/js/controller.js:80:5)
at l (http://localhost:3000/js/jquery.min.js:2:29375)
at c (http://localhost:3000/js/jquery.min.js:2:29677) undefined
jquery.min.js:2 Uncaught SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
at processJSONData (controller.js:99)
at HTMLDocument.<anonymous> (controller.js:80)
at l (jquery.min.js:2)
at c (jquery.min.js:2)

但是如果我实际查看控制台中返回的结果,数据实际上就在那里。因此,await 函数似乎不是“等待”,我的代码在ajax 调用后继续执行,并且它正在尝试解析尚未返回的JSON 数据。如何让等待等待?

谢谢......

最佳答案

async 函数返回 Promise。即使您从异步函数返回某些内容,它也只是 Promise 解析为的值。

您需要执行以下操作才能使用 promise :

$(document).ready(function () {
doAjaxGet( "/static/imeiXref.json")
.then(json => {
console.log('json: ', json);
processJSONData( json );
})
});

编辑。这是一个工作片段。但请注意,这是下载 json 而不是字符串,因此不需要解析它。这确实是一个与异步问题不同的问题,异步问题似乎工作正常。

async function doAjaxGet(ajaxurl) {
const result = await $.ajax({
url: ajaxurl,
type: 'GET',
});
return result;
}

$(document).ready(function() {
doAjaxGet("https://jsonplaceholder.typicode.com/posts/1")
.then(json => {
console.log('json: ', json);
processJSONData(json);

})
});


function processJSONData(data) {
// NOTE: data is already parsed
console.log('Data: ', data);
console.log("id: ", data.userId)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - js 异步/等待不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49041447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com