在异步函数中的 setTimeout 中执行代码?

executing code inside setTimeout in a asynchronous function?

一个简单的脚本,我想要实现的是在 append 方法中推送新项目,并使用异步函数

我试图了解 then 和 catch 是如何工作的,而不是在不了解它们内部如何工作(使用 axios 或其他东西)的情况下使用它们

推送必须在 3 秒后执行

我尝试在 setTimeout 中使用 resolve 方法,但出现错误,因为无法识别 resolve,我正在返回一个 Promise,因为我无法等待 setTimeout

<script>

    async function test(terms) {
        let termss = await append(terms);
        return [termss[termss.length - 2], termss[termss.length - 1]]
    }

    async function append(arr) {
        var arrr = arr;

        const waitFor = () => new Promise(resolve => {
            setTimeout((resolve) => {
                arrr.push("Taoufiq")
                arrr.push("understands");
            }, 3000)
        });

        await waitFor();

        return arrr;
    }

    test([1, 2, 3, 9]).then((result) => {
        console.log(result)
    })

</script>

帮助理解这是如何工作的?

我的预期结果是返回一个包含 ["Taoufiq", "understands"]

的数组

你应该可以用下面的代码做你想做的事:

async function test(terms) {
    let termss = await append(terms);
    return [termss[termss.length - 2], termss[termss.length - 1]]
}

async function append(arr) {
    return new Promise(resolve => {
        setTimeout(() => {
            arr.push("Taoufiq")
            arr.push("understands");
            resolve(arr)
        }, 3000)
    });
}

test([1, 2, 3, 9]).then((result) => {
    console.log(result)
})

所以你必须 return append 函数中的新 Promise 并使用 Promise 构造函数在 setTimemout 中给你的 resolve 方法.