如何在嵌套函数中使用asyncawait语句?

问题描述 投票:0回答:1

有一个嵌套函数,其中使用了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() 是不能使用的。

javascript api
1个回答
0
投票

你还需要使 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);

0
投票

你可能会得到更好的服务,返回一个承诺的列表,并使用一个 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;

-1
投票

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();
© www.soinside.com 2019 - 2024. All rights reserved.