我对Javascript相当陌生,希望在谈到如何解决promise的顺序时,能对async/await做一点澄清。
假设我有一个异步函数,我们称之为foo,它检索某些内容,然后使用fs将其写入文件。promise图书馆。
const foo = async () => {
const x = await getX();
fs.promises.writeFile(path, x); //do I need to await this?};
我还有另一个异步函数,它将调用foo,然后在写入文件内容后对其进行处理——在网页上显示,进行计算,等等。
const doSomething = async () => {
await foo(); //want to make sure foo resolves before calling otherFileFunc
otherFileFunc(); };
我希望确保在执行otherFileFunc之前,文件内容已写入,即writeFile的promise已得到解决。在这里等待foo已经足够了,还是foo的promise可以在writeFile的promise解决之前解决?我应该在foo中等待writeFile以确保这一行为,还是foo的整个promise解决依赖于writeFile解决的promise,因此等待它是多余的?
非常感谢。
const foo = async () => {
const x = await getX();
fs.promises.writeFile(path, x); // do I need to await this?
}
WriteFile是一个返回promise的异步函数。
const doSomething = async () => {
await foo(); //
otherFileFunc(); };
将在没有写文件完成的情况下调用TherFileFunc()。
解决方案:
const foo = async () => {
const x = await getX();
return fs.promises.writeFile(path, x); // do I need to await this?
}
现在,writeFile本身返回一个promise,由foo()返回。因为foo()现在从writeFile返回promise,await foo()
按预期工作。
所以,在我看来,你的第二个答案是正确的。
foo的整个promise解决依赖于书面文件解决的promise,因此等待它是多余的?
您在后台编写了一个文件,而foo
函数没有await
语句,在文件完成编写之前解决了它的promise,这是不正确的。
在这里等待foo已经足够了,还是foo的promise可以在writeFile的promise解决之前解决?我应该在foo中等待writeFile以确保这一行为,还是foo的整个promise解决依赖于writeFile解决的promise,因此等待它是多余的?
foo
的promise由foo
的代码控制。每个wait
都使promise等待另一个promise。函数的promise将在函数代码结束时解决。
对于每个异步函数调用,通常等待
,以获取结果值或知道任务何时完成(如在同步编程中)。
const foo = async () => {
const x = await getX();
await fs.promises.writeFile(path, x);
};
doSomething
将按预期工作,因为它将等待foo()
返回的promise,而foo()又将等待getX()
返回的promise,然后等待fs返回的promise。promise。writeFile()
。
附笔。
MDN有一篇关于异步/等待的好文章,它涵盖了概念、与promise的相关性和错误处理。
我是否应该在foo
中等待writeFile
以确保此行为?
对
或者
foo
的整个promise解析依赖于writeFile
解析的promise吗
否。
async
函数的promise解析仅取决于其主体的返回值。要使其依赖于另一个promise,您必须
等待
,以暂停异步
函数的执行。通过考虑返回被调用函数的结果(即使值是
未定义的
,在您的情况下,隐含的结果是文件已完全写入),可以最容易地实现这一点-您只能在等待结果的情况下才能这样做。
async function foo() {
const x = await getX();
await fs.promises.writeFile(path, x);
}
async function foo() {
const x = await getX();
return fs.promises.writeFile(path, x);
}
在执行
async
函数期间创建的任何promise都没有隐式等待。如果有的话,你a)不能做像Promise.allb)这样的事情,如果你真的不想等待,就不能启动和忘记任务。
本文向大家介绍详解koa2学习中使用 async 、await、promise解决异步的问题,包括了详解koa2学习中使用 async 、await、promise解决异步的问题的使用技巧和注意事项,需要的朋友参考一下 关键词:async 、await、promise 这三个东西 可以优雅的解决异步问题。在学习koa2的时候遇到了获取数据后再进行模板渲染的异步问题。在查找各种资料后成功的解决了该问
这是我的方法: 我显示加载程序时,但使用在抛给我一个关于字保留的错误。对于验证,我使用VeeValester 如何使用wait-insidepromise?
现有这样的定义async/await的场景: 报错信息: 请问这里应该如何整改呢?
为了更好地理解异步控制流,我阅读了几篇stackoverflow文章、博客文章和Nodejs设计模式书。现在,我很容易编写常规回调传递样式(CPS)代码。然而,我试图摆脱这种习惯,提高代码的可读性(或者,避免“回调地狱”)。我的问题是,我似乎把、和理解为单独的概念以及如何使用它们。但是,我不确定如何利用它们将CPS函数转换为没有嵌套。 null
Async/await 是以更舒适的方式使用 promise 的一种特殊语法,同时它也非常易于理解和使用。 Async function 让我们以 async 这个关键字开始。它可以被放置在一个函数前面,如下所示: async function f() { return 1; } 在函数前面的 “async” 这个单词表达了一个简单的事情:即这个函数总是返回一个 promise。其他值将自动被
在第一章节,我们简要介绍了async/.await,并用它来构建一个简单的服务器。本章将更为详细讨论async/.await的它如何工作以及如何async代码与传统的 Rust 程序不同。 async/.await是 Rust 语法的特殊部分,它使得可以 yield 对当前线程的控制而不是阻塞,从而允许在等待操作完成时,其他代码可以运行。 async有两种主要的使用方式:async fn和asyn