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

时间:2016-05-07 14:45:05

标签: typescript

等待一个甚至不调用它的函数是没用的。但它不会生成编译时错误或运行时错误。我无法弄清楚在什么情况下任何人都会等待一个功能 在以下代码中,将不会执行foo。为什么打字稿禁止它?

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();

1 个答案:

答案 0 :(得分:3)

因为await <expression>期望<expression>成为承诺。如果它不是Promise(通过promise定义),那么该值将被包装到Promise中。您可以从msdn.blogs

调查ping的async-await示例

正式地,您可以预期await 10;是正确的。因为您不能禁止将普通对象或原始值包装到Promises中。因此await foo;作为普通对象值foo的包装器(javascript are objects中的函数,你知道吗,对吧?)

你会在哪里使用它?

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

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