gpt4 book ai didi

node.js - 是否可以将异步函数传递给 setImmediate 以异步调用任意函数?

转载 作者:行者123 更新时间:2023-12-03 12:16:52 25 4
gpt4 key购买 nike

我想异步调用给定的函数。包装函数 tryCallAsync 是执行此操作的一种方法。这种方法有效。但是,它要求 setImmediate 的回调是异步函数。这似乎是错误的,因为回调正在返回一个未使用的 Promise。为此目的将异步函数传递给 setImmediate 是错误的吗?

async function tryCallAsync(fn, ...args) {

return new Promise((r, j) => {

setImmediate(async () => {

try {
r(await fn(...args));
}
catch (e) {
j(e);
}
})
})
}

// Using tryCallAsync

let resolveAsync = tryCallAsync(()=>{
return new Promise((r,j)=>{
setImmediate(()=>r('resolveAsync'));
});
})

resolveAsync.then((resolve)=>console.log(resolve));

let resolve = tryCallAsync(()=>{
return 'resolve';
});

resolve.then((resolve)=>console.log(resolve));
注意: https://www.youtube.com/watch?v=e3Nh350b6S4

最佳答案

是的,这是错误的,原因有很多:

  • setImmediate不处理返回的 promise ,尤其是不处理错误1
  • 使用 Promise 时,不要将业务逻辑放在异步(非 promise )回调中。从那里兑现 promise ,别无他物。

  • 1:即使您的特定回调从未因 try 而拒绝返回的 promise / catch ,还是感觉不对
    你的函数应该写成
    async function tryCallAsync(fn, ...args) {
    await new Promise(resolve => {
    setImmediate(resolve);
    });
    return fn(...args);
    }

    关于node.js - 是否可以将异步函数传递给 setImmediate 以异步调用任意函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65530809/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com