ari*_*xis 8 javascript promise async-await es6-promise ecmascript-7
我想用babel运行这段代码:
redisClientAsync.delAsync('key');
return await someOtherAsyncFunction();
Run Code Online (Sandbox Code Playgroud)
在没有等待第一行的异步函数内部.这个可以吗?
我怎么能运行一些我不在乎的东西?
我可以在没有回调的情况下触发非promisified函数del('key',null)吗?
Ben*_*aum 16
在异步函数中,无需等待第一行。这个可以吗?
是的,在某些情况下,您想要这样做是完全合理的。特别是在您不关心结果的情况下 - 一个示例是不应干扰业务关键代码的分析跟踪操作。
我怎么能运行我不关心的东西?
在许多方面,但是简单地调用 promise 函数是可行的。del在这种情况下,您没有回调可能会起作用,但某些函数不会防止不传递回调,因此您可以改为传递一个空函数 ( .del('key', () => {}))。
但是,您确实希望确保您知道它失败,即使您不想中断代码的操作 - 因此请考虑添加process.on("unhandledRejection',事件处理程序以显式忽略这些特定异常或通过以下方式抑制它们:
redisClient.delAsync('key').catch(()=>{});
Run Code Online (Sandbox Code Playgroud)
或者最好是这样的:
redisClient.delAsync('key').catch(logErr);
Run Code Online (Sandbox Code Playgroud)
Ber*_*rgi 15
是的,你可以这样做,它将并行运行两个异步函数.你刚刚创造了一个承诺并把它抛弃了.
但是,这意味着当承诺被拒绝时,您将不会注意到.你最终会得到一个unhandledRejection.
这个可以吗?我该怎么办一些我不在乎的东西?
可能不行.如果你真的不在乎,你首先没有运行它.所以你应该清楚明确你所关心的(以及不是):
如果您只想等待并且不关心结果值,则可以轻松地丢弃结果:
void (await someAsyncFunction()); // or omit the void keyword,
// doesn't make a difference in an expression statement
Run Code Online (Sandbox Code Playgroud)
如果您不关心异常,可以使用它们来忽略它们
… someAsyncFunction().catch(function ignore() {}) …
Run Code Online (Sandbox Code Playgroud)
你可以抛弃它,等待它,用它做任何事情.
如果你想要结果,你必须等待它.如果您关心异常,但实际上并不想等待,您可能希望与以下函数并行执行:
var [_, res] = await Promise.all([
someAsyncFunction(), // result is ignored, exceptions aren't
someOtherAsyncFunction()
]);
return res;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6040 次 |
| 最近记录: |