客户端 javascript 从异步调用中解压值
Clientside javascript unpack value from asynchronous call
我的客户端服务器上有以下代码,连接到 node.js 服务器:
async function updateHTML(text){
const response = await ServerHandshake(text);
console.log("done");
let script = document.createElement("script");
script.text = response;
document.body.appendChild(script);
}
async function ServerHandshake(text){
// POST
fetch('/text', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: text
})
})
.then(function(response){
if(response.ok){
console.log('POST success.');
return;
}
throw new Error('POST failed.');
})
.catch(function(error){
console.log(error);
});
// GET
fetch('/processed', {method: 'GET'})
.then(function(response){
if(response.ok){
console.log("GET success.");
return response.json();
}
throw new Error('GET failed.');
})
.then(function(data){
let returnValue = data.result;
console.log(returnValue);
return returnValue;
})
.catch(function(error) {
console.log(error);
});
}
(async function(){
await updateHTML("hello, world!");
})();
控制台记录 serverHandshake
的 return 值,但异步调用后的 html 文件显示 undefined
.
"Done"也是最先打印的;似乎应该稍后打印,但不知何故 await 无法正常工作。
执行此操作的正确方法是什么?
注意我问的是客户端,而不是服务器端
您混淆了回调风格(.then()
)和等待风格,这就是它不起作用的原因。
删除所有 .then()
并以这种方式使用它:
async function updateHTML(text){
const response = await ServerHandshake(text);
if(response.ok){
console.log('POST success.');
}
}
function ServerHandshake(text){
return fetch( ... ); // this can be awaited
}
我的客户端服务器上有以下代码,连接到 node.js 服务器:
async function updateHTML(text){
const response = await ServerHandshake(text);
console.log("done");
let script = document.createElement("script");
script.text = response;
document.body.appendChild(script);
}
async function ServerHandshake(text){
// POST
fetch('/text', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: text
})
})
.then(function(response){
if(response.ok){
console.log('POST success.');
return;
}
throw new Error('POST failed.');
})
.catch(function(error){
console.log(error);
});
// GET
fetch('/processed', {method: 'GET'})
.then(function(response){
if(response.ok){
console.log("GET success.");
return response.json();
}
throw new Error('GET failed.');
})
.then(function(data){
let returnValue = data.result;
console.log(returnValue);
return returnValue;
})
.catch(function(error) {
console.log(error);
});
}
(async function(){
await updateHTML("hello, world!");
})();
控制台记录 serverHandshake
的 return 值,但异步调用后的 html 文件显示 undefined
.
"Done"也是最先打印的;似乎应该稍后打印,但不知何故 await 无法正常工作。
执行此操作的正确方法是什么?
注意我问的是客户端,而不是服务器端
您混淆了回调风格(.then()
)和等待风格,这就是它不起作用的原因。
删除所有 .then()
并以这种方式使用它:
async function updateHTML(text){
const response = await ServerHandshake(text);
if(response.ok){
console.log('POST success.');
}
}
function ServerHandshake(text){
return fetch( ... ); // this can be awaited
}