有一个嵌套函数,其中使用了asnyc函数和普通函数。对了,我是JavaScript的初学者。
async function run() {
try {
await Excel.run(async context => {
document.getElementById("status").value = "";
let checks = [];
const sheet = context.workbook.worksheets.getActiveWorksheet();
const uR = context.workbook.getSelectedRange();
uR.load('values');
await context.sync();
let data2 =uR.values;
let data2.forEach((row,index)=>{
docfunction(row);
在这个 docfunction
我想用。
function docfunction(row) {
let checknumber = context.workbook.functions.isNumber(row[5]);
checknumber.load('value');
await context.sync();
checknumber = checknumber.value;
但是: await context.sync()
是不能使用的。
你还需要使 docfunction
async来使它工作。
async function docfunction(row) {
let checknumber = context.workbook.functions.isNumber(row[5]);
checknumber.load('value');
await context.sync();
checknumber = checknumber.value;
那么你需要用 await
关键词在您的 run
函数。
await dysfunction(row);
你可能会得到更好的服务,返回一个承诺的列表,并使用一个 for await of
循环,但这应该是你要找的。你可以用一个 .forEach
但实际上没有理由这样做,因为这不会使代码更易读。
async function run() {
try {
await Excel.run(async context => {
document.getElementById("status").value = "";
let checks = [];
const sheet = context.workbook.worksheets.getActiveWorksheet();
const uR = context.workbook.getSelectedRange();
uR.load('values');
await context.sync();
let data2 =uR.values;
for(const [row,index] of data2.entries()) {
await docfunction(row);
...
async function docfunction(row) {
let checknumber = context.workbook.functions.isNumber(row[5]);
checknumber.load('value');
await context.sync();
checknumber = checknumber.value;
await期待一个承诺,这里是asyncawait的虚拟代码。
async function run() {
// It will wait for the promise to resolve
await new Promise((resolve) => {
setTimeout(() => {
resolve(console.log('Inside promise'));
}, 3000);
});
// when promise gets resolved it will print
console.log('Outside Promise');
}
run();