为什么'await'函数不是Typescript中的错误?

为什么'await'函数不是Typescript中的错误?,typescript,Typescript,等待一个甚至不调用它的函数是没有用的。但它不会生成编译时错误或运行时错误。我不知道在什么情况下会有人等待函数。 在以下代码中,foo将不会执行。为什么Typescript不禁止它 async function foo(){ console.log("foo"); } async function bar(){ //correct usage should be: await foo(); await foo; } bar(); //generated es6 co

等待一个甚至不调用它的函数是没有用的。但它不会生成编译时错误或运行时错误。我不知道在什么情况下会有人等待函数。
在以下代码中,
foo
将不会执行。为什么Typescript不禁止它

async function foo(){
    console.log("foo");
}
async function bar(){
    //correct usage should be:   await foo();
    await foo;
}
bar();


//generated es6 code.
function foo() {
    return __awaiter(this, void 0, void 0, function* () {
    });
}
function bar() {
    return __awaiter(this, void 0, void 0, function* () {
        yield foo;
    });
}
bar();
因为
wait
期望
成为承诺。如果它不是承诺(根据承诺定义),那么该值将被包装到承诺中。您可以从中研究
ping
的异步等待示例

正式地说,你可以期待
等待10以确保正确。因为不能禁止将普通对象或基本值包装到承诺中。因此,
等待foo
用作普通对象值的包装器
foo
(您知道,函数在中,对吧?)

你会在哪里使用它?

想象一种情况,当你事先不知道手术是否需要时间时。例如,您有一个缓存实现


如果对象在内存中,则不必从源(db或web)读取它,这将是一个异步操作。所以它是同步解析的(从内存读取)。但是,接口应该是相同的。因此,您将
等待
一个普通对象。

异步等待模式将帮助您避免使用承诺,您可以在函数上等待,这确实会带来耗时的任务。。。我知道它是基于C#异步等待模式的。但我不明白为什么有人会等待函数对象而不是它返回的承诺@MithunPattankarOops抱歉,我的坏消息是它允许异步等待在内部使用承诺。。TypeScript的async/await模式利用承诺,就像C#的async/await模式利用TasksTypeScript不仅仅是JavaScript的替代品,它帮助编写代码,就像C#、Java等编程语言一样。您也可以在这里查看TypeScript中异步函数的语言规范。