是的,我想完全同步。我知道它将完全停止我的一个线程,但我确实需要这样做,因为我使用了一些我不想更改的SDK,因此在此SDK中,您需要传递一个将被调用且将更改的函数像这样的一些价值:
function onNonce(stuff) {
const url = 'fancy url to change stuff';
// await also doesn't work
// const response = await fetch(url);
// const resp_json = await response.json();
// return resp_json.token;
// await also doesn't work
const req = new XMLHttpRequest();
req.open("GET", url, false); // <-- completely sync and deprecated
req.send();
if(req.readyState === 4 && req.status === 200) {
return req.response.token;
}
}
这就是我的func的称呼方式:
function SDK(result) {
//
// SOME FANCY CODE
//
var the_value_to_change;
the_value_to_change = onNonce('some stuff');
console.log("async");
//
// SOME FANCY CODE that uses this the_value_to_change
//
}
如果我使用await,那么我的函数将返回 Promise (而不是令牌),并且如果我将 open 与 true(异步)一起使用,则我得到未定义。带有 false(完全同步)的变体已弃用,因此我想使用访存API进行相同的操作。
//编辑//
那么,如何完全同步执行 onNonce 函数(获取和 response.json())?
答案 0 :(得分:0)
答案 1 :(得分:0)
function onNonce() {
const url = 'fancy url to change stuff';
return new Promise(function (resolve, reject) {
const req = new XMLHttpRequest();
req.open('GET', 'url', true);
req.onreadystatechange = function () {
if (req.readyState === 4 && req.status === 200) {
resolve(req.responseText);
}
};
req.send();
});
}
async SDK() {
var the_value_to_change;
the_value_to_change = onNonce();
let result = await the_value_to_change;
}
这应该有效。您必须使用值来解析Promise
。