Per MDN :
Do not use synchronous requests outside Web Workers.
Вы можете настроить логику между двумя функциями так, чтобы вы определяли signTransaction () для получения в выводе вашего XML-запроса, а затем вкладывали signTransaction.в пределах getNonce.В этом смысле getNonce становится контроллером, а signTransaction является промежуточным выходом обратно в getNonce.
function signTransaction(to,amount,inputhex, nonceResponse){
let tx = {
To : to,
PrivateKey : pri,
Balance : amount,
Nonce : String(nonce),
Gas : "1",
Type : "a64",
Input : inputhex
}
let transaction = new sdag.Signs.NewTransaction(pri,tx);
return transaction
}
function getNonce(to,amount,inputhex) {
var request = new XMLHttpRequest();
request.open('GET', 'http://192.168.51.212:9999/getAccount?
address=23471aa344372e9c798996aaf7a6159c1d8e3eac', true);
//third arg to request.open() could be omitted if intent is to process call asynchronously
request.onload = function () {
var data = JSON.parse(this.response);
if (request.status >= 200 && request.status < 400) {
nonce = data.Nonce;
return signTransaction(to,amount,inputhex,data)
} else {
console.log('error');
}
}
Вы также можете использовать синтаксис ES6 async / await, чтобы использовать преимущества обещаний и генерировать поток программы во время выполнения асинхронных операций.:
async function signTransaction(to,amount,inputhex){
nonce = await getNonce(); // `await` call yields flow back to the thread while the other async function getNonce() is executed
tx = {
To : to,
PrivateKey : pri,
Balance : amount,
Nonce : String(nonce),
Gas : "1",
Type : "a64",
Input : inputhex
}
let transaction = new sdag.Signs.NewTransaction(pri,tx);
}
async function getNonce() {
var request = new XMLHttpRequest();
request.open('GET', 'http://192.168.51.212:9999/getAccount?address=23471aa344372e9c798996aaf7a6159c1d8e3eac', true);
//third arg to request.open() could be omitted if intent is to process call asynchronously
request.onload = function () {
var data = JSON.parse(this.response);
if (request.status >= 200 && request.status < 400) {
nonce = data.Nonce;
return nonce; // returning here resolves the promise that is implicitly returned from an async function with the value returned from your XML call. This value triggers continuation of the signTransaction function with XML call result
} else {
console.log('error');
}
}
// Send request
request.send(null);
}