if语句中的Javascript等待保留关键字错误
我正在编写一个小的JS脚本,其中一个用户输入他的IBAN,在输入前12个字符后,我从另一个URL请求银行名称和BIC。由于我必须等待该请求完成,因此我将函数设置为异步,并在请求中添加了一个“wait”。但是,我的脚本不再编译,出现以下错误:“解析错误:await是一个保留字”,指向我新添加的“await”。由于这个“等待”在几个if条件中,我想这可能就是问题所在。但是,它需要在这些if条件内。那么,有没有人知道我做错了什么,以及如何在if条件下获得等待 这是我的代码:if语句中的Javascript等待保留关键字错误,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我正在编写一个小的JS脚本,其中一个用户输入他的IBAN,在输入前12个字符后,我从另一个URL请求银行名称和BIC。由于我必须等待该请求完成,因此我将函数设置为异步,并在请求中添加了一个“wait”。但是,我的脚本不再编译,出现以下错误:“解析错误:await是一个保留字”,指向我新添加的“await”。由于这个“等待”在几个if条件中,我想这可能就是问题所在。但是,它需要在这些if条件内。那么,有没有人知道我做错了什么,以及如何在if条件下获得等待 这是我的代码: function requ
function requestBICandBankname(country, bban) {
return new Promise(function (resolve, reject) {
const xhr = new XMLHttpRequest();
const url = URL + country.toUpperCase() + '/' + bban;
xhr.open('GET', url, true);
xhr.onload = function () {
if (this.status >= 200 && this.status < 300) {
return resolve(xhr.response);
}
return reject({
status: this.status,
statusText: xhr.statusText
});
};
xhr.onerror = function () {
return reject({
status: this.status,
statusText: xhr.statusText
});
};
xhr.send();
});
}
async function initLookup() {
const ibanData = document.getElementById('iban-details');
let country = '';
let bban;
if (ibanData !== null) {
ibanData.oninput = function (event) {
const iban = ibanData.value;
if (iban.length === 12) {
country = iban.substr(0, 2);
bban = iban.substr(4, 12);
try {
const bankdata = await requestBICandBankname(country, bban);
console.log('bankdata', bankdata);
} catch (err) {
console.log(err);
}
}
};
}
};
export {
initLookup
};
只能在声明为async的函数中等待
iBanda.oninput函数不是这样声明的。您只能在声明为异步的函数中等待
iBanda.oninput函数不是这样声明的。您可以将事件转换为承诺,但如果存在错误,也应侦听错误,否则如果以某种方式失败,它将永远不会继续:
const inputAsPromise = (ibanData) =>
new Promise((resolve, reject) => {
ibanData.oninput = resolve;
//@todo: onerror should be reject
});
async function initLookup() {
const ibanData = document.getElementById('iban-details');
let country = '';
let bban;
if (ibanData !== null) {
await inputAsPromise(ibanData);
const iban = ibanData.value;
if (iban.length === 12) {
country = iban.substr(0, 2);
bban = iban.substr(4, 12);
try {
const bankdata = await requestBICandBankname(
country,
bban,
);
console.log('bankdata', bankdata);
} catch (err) {
console.log(err);
}
}
}
}
上面代码的问题是oninput可能会触发多次,但您只能解决一次承诺。如果是这种情况,则只有在满足某些条件时才能解决:
const inputAsPromise = (ibanData) =>
new Promise((resolve, reject) => {
ibanData.oninput = (e)=>ibanData.value.length === 12?resolve():'';
//@todo: onerror should be reject
});
这只是一个例子,您必须了解在您的情况下,什么是有效的。您可以将事件转换为承诺,但如果存在错误,也应该侦听错误,否则如果以某种方式失败,它将永远不会继续:
const inputAsPromise = (ibanData) =>
new Promise((resolve, reject) => {
ibanData.oninput = resolve;
//@todo: onerror should be reject
});
async function initLookup() {
const ibanData = document.getElementById('iban-details');
let country = '';
let bban;
if (ibanData !== null) {
await inputAsPromise(ibanData);
const iban = ibanData.value;
if (iban.length === 12) {
country = iban.substr(0, 2);
bban = iban.substr(4, 12);
try {
const bankdata = await requestBICandBankname(
country,
bban,
);
console.log('bankdata', bankdata);
} catch (err) {
console.log(err);
}
}
}
}
上面代码的问题是oninput可能会触发多次,但您只能解决一次承诺。如果是这种情况,则只有在满足某些条件时才能解决:
const inputAsPromise = (ibanData) =>
new Promise((resolve, reject) => {
ibanData.oninput = (e)=>ibanData.value.length === 12?resolve():'';
//@todo: onerror should be reject
});
这只是一个例子,你必须看看在你的情况下什么是有效的。哦,我明白了!我只是一直在看父函数!谢谢你,我明白了!我只是一直在看父函数!谢谢