我第一次使用异步编程,特别是Javascript中的promises,我真的很困惑。我仍然在思考我们在C,PHP,C#等等所做的每一步,下一个步骤可以确定它的完成。这很容易,因为如果我们有这样的代码(例如在C#中)
IEnumerable<Page> pages = pagesRepository.getAll();
我们可以在下一行确定所有网页 可供我们在pages
对象中使用。这使生活更轻松,因为我们已经可以正确地处理这些数据了。
现在,在带有承诺的JS中,我们会有类似
的东西var pages = dataService.getPages();
这不会返回数据,只是一个非常不同的承诺。当然我们可以用then
添加一个回调但是我很困惑,因为我的代码中的其他地方我可能需要引用这个变量,我不能确定何时会调用回调。
那么当我们处理这些事情时,我们该怎么想?是否有一些教程或一些视频详细说明如何使用JS中的promise进行异步编程?
答案 0 :(得分:3)
当然我们可以添加一个回调,但是我很困惑,因为我的代码中的其他地方我可能需要引用这个变量,而且我不能确定何时会调用回调。
你不需要。
“其他地方代码”将使用.then()
并根据pages
承诺为其结果产生新的承诺。您可以轻松映射结果,或链接其他异步任务。每当您需要了解由于多个依赖项而导致的回调时间时,您应该使用库的方法来编写承诺,例如all()
。
那么当我们处理这些事情时,我们如何思考?
思考functional!
程序中的每个任务都应该明确且仅取决于其输入。函数应该尝试仅使用其参数,而不是任何包含state的全局变量。
Q库维基中的是否有一些教程或一些视频详细说明如何使用JS中的promise进行异步编程?
General Promise Resources是一个非常好的开始。
答案 1 :(得分:0)
这里的简单答案是promises类似于C#中的Task异步编程。
但是,不能使用'await'运算符,对promise的'then'函数类似于使用'ContinueWith'链接C#中的Tasks。
回调可能会在范围内变得复杂,特别是在广泛使用嵌套匿名函数时,所以请给出承诺