与python中的js then()等效?

与python中的js then()等效?,python,python-3.x,typescript,concurrent.futures,Python,Python 3.x,Typescript,Concurrent.futures,在Typescript中,我习惯于这样编写异步代码: async function foo() // returns a promise return new Promise<string>( resolve, reject) { resolve('Hello!'); }); async function bar() { s: string = await foo(); } async function baz() { foo().th

在Typescript中,我习惯于这样编写异步代码:

async function foo()  // returns a promise
    return new Promise<string>( resolve, reject) {
       resolve('Hello!');
    });

async function bar() {
  s: string  = await foo();
}

async function baz() {
   foo().then((s: string) { alert(s); }

但是foo和baz的python等价物呢?我该怎么写呢?我应该使用对象吗?如果是这样的话,怎么办?

Python异步/等待语法看起来真的像ECMAScript异步/等待语法。没有等效的.then,就像您不需要.then一样,在ES中使用async/await

等效的异步Python代码将使用bar省略,因为它什么也不做:

import asyncio

async def foo():
    return 'Hello!'

async def baz():
    s = await foo()
    print(s)

asyncio.run(baz())
Python的异步支持是隐藏等待项,而不是公开它们。因此,人们通常不会显式地使用JS承诺的等价物——在大多数异步框架中是未来或任务——而是使用本机语言原语

异步def foo: 回敬你好!异步函数直接返回 异步定义栏: s=等待foo异步函数被等待 异步def baz: printWait foo wait函数,然后使用其结果 上面的代码只是本机原语,因此在所有Python异步框架中都是有效的,无论是asyncio、trio、curio还是其他。并非所有异步框架都支持与承诺添加回调进行显式交互——事实上

asyncio框架允许向和对象添加回调,它们表示类似于线程的一级并发操作。此类操作本身通常不是异步的,可以通过常规函数完成

导入异步 def qux: footure=asyncio.create\u taskfoo footure.add_done_callbacklambda foot:printfThe future said{foot.result} 回程足部 请注意,虽然asyncio公开了此功能,但它被认为是低级别用例的专有功能

添加要在任务完成时运行的回调

此方法只能在基于回调的低级代码中使用


您是否查阅了Python异步的基本教程?asyncio库有几个示例,大多数其他异步框架也是如此。。Python的承诺称为可等待项,其作用不如您所展示的那么明确。虽然可以根据异步框架做类似的事情,但这不是惯用的风格。这是我在解决方案上发布的。很抱歉看一看文档,你的TypeScript语法无效,并且你没有从bar返回任何东西,因此该函数是不可操作的。每次我读到一篇文章,比如你第一个链接上的文章,我都会想到这篇文章:
import asyncio

async def foo():
    return 'Hello!'

async def baz():
    s = await foo()
    print(s)

asyncio.run(baz())