- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经采用了库Q.js
进入我的程序尝试解决代码中执行顺序的一些问题,我是 promises
的新手和deferred
总的来说,这对我来说是相当困难的一步。
此时,我正在使用 Q v1
ASP.NET MVC
内,因此我使用 Visual Studio 2013
.
现在,我正在做的实际代码比这长得多,但我会尽量简洁,因为我经常被告知我的问题太长太冗长。
我首先包括 q.js
和require.js
通常情况下,这里没有什么特别的事情发生。它工作正常,可以编译,可以运行,一切都很愉快。
@Scripts.Render("~/scripts/q")
@Scripts.Render("~/scripts/require")
<script type="text/javascript">
Q().then(function(){
// some code executes here.
$.blockUI(); // the whole page is blocked while loading.
console.log("[1] first step. blocking the page.");
}).then(function() {
console.log("[2.1] starting the second step.");
require(['home/app/init'], function(app) {
console.log("[2.2] within the require function.");
new app.init().wiring(); // this does some preliminary stuff for the app
});
console.log("[2.3] outside of the require function.");
}).then(function() {
console.log("[3.1] made it to the third step. stuff happens.");
});
</script>
现在,运行此代码,控制台输出 2.1
和2.3
在 2.2
之前可见——这才是问题的关键。我想让它按顺序运行。所以我进一步挖掘,发现了这个建议;改变我的require
有人建议我打电话让自己看起来更像这样..
// ....
.then(function(){
var promise = Q.when(require['home/app/init'], function(app) {
console.log("[2.2.1] within the require");
new app.init().wiring();
}).then(function() {
console.log("[2.2.2] I expect to see this after 2.2.1");
});
console.log("[2.3] outside of the require function.");
});
现在我明白了2.3
仍将在 2.2.1
之前运行,但我仍然看到2.2.2
之前运行 2.2.1
- 我认为将行为包装在 Q.when(fn)
中应该解决这个问题吗?
有人可以帮助我理解为什么这些没有按照我要求的顺序运行吗?
有关更多信息,请访问文件 home/app/init
实际上是一个Typescript
文件看起来有点像这样;
export class init {
public function wiring() {
// some simple things happening here, nothing special.
}
}
我不确定这个问题是否符合ASP.NET MVC
的条件标签,但事实上我使用该框架对于我使用的工具至关重要,这确实对我能做的事情有影响(例如,由于 Visual Studio,我在涉及 node.js
的事情上遇到了困难) - 所以我明确地标记它以确保人们意识到我所处的开发环境。
我在这方面已经取得了一些进展,尽管我仍然有点不确定。目前,以下代码似乎更多地按照我期望的顺序运行。
// .....
.then(function(){
console.log("[2.1]");
// create a deferred promise
var deferred = Q.defer();
require(['home/app/init'], function(app) {
// we are inside the require function
console.log("[2.2]");
// run the actual method
new app.init().wiring();
// report back to the console.
console.log("[2.3]");
// resolve the promise
deferred.resolve();
});
console.log("[2.4]");
Q.when(deferred.promise).then(function() {
console.log("[2.5]");
}).then(function(){
// ... continue
});
这至少看起来会导致代码暂停并等待 require
在继续到 2.5
之前完成,但我不确定这是否是使用 Q.js
执行此操作的正确方法.
最佳答案
2.1 将在 2.2 之前运行,因为这是您运行代码的顺序,但 2.2 代码是异步运行的,因此一旦 require 得到所有内容,就会运行,这将比执行 2.3 代码花费更多的时间
我认为在你的第二个代码块中,你想将 2.2.2 block 移动到when中,请参阅本页底部的when文档 https://github.com/kriskowal/q
关于javascript - Q.js 和 ASP.NET MVC 中的执行顺序困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478986/
例子一 function first(a, b) { return a + b; } function second() { return Math.floor(Math.sqrt(a
我想证明或证伪forall (P Q : Prop), (P -> Q) -> (Q -> P) -> P = Q.在柯克。这是我的方法。 Inductive True2 : Prop := | O
程序提取数字,我希望它继续循环,直到用户键入“Q”/“q”键。例如,当用户按下“O”键时,程序应打印他们输入的数字的个位数,对于用户输入的任何 3 位数字,依此类推。当我现在运行代码时,没有输出,但也
我收到以下代码的警告,我不明白为什么。 类似于这个问题:Unhandled rejection reasons (should be empty) 但是…… 我很确定我正在处理所有错误,那么为什么会出
我正在使用 Express 构建一个博客站点,并且是第一次使用 Q,我希望能够利用资深 Q 用户的知识。 我向我的数据库发出一个请求以加载帖子数据,另一个请求命中 Instagram API(除非它已
我刚刚找到有关 apache solr 的信息,并且在我成功安装了带有 Tomcat 的 apache Solr 之后。然后我开始使用 Apache Solr 进行搜索。 但我对 Apache Sol
我在 Stack Overflow post 上看到了下图 但是,我对“p OR q”、“p AND q”的结果感到困惑,其中“p”等于“false”,“q”等于“unknown”。 在图中,“p O
有人向我提出了这个问题。 n = 77 n = p*q p and q is a prime number 用蛮力找到p和q。 到目前为止我的代码: public class If { pub
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 4 年前。 Improve
我注意到如果 .then()回调由于任何错误(例如对 undefined variable 的操作)而失败,并且没有 .catch()相关联,该错误将被静默忽略。 这在开发过程中很不舒服。 例如,此代
以下示例打印“SAME”: if (q/\\a/ eq q/\a/) { print "SAME\n"; } else { print "DIFFERENT\n"; } 我理解这与 d
我画了 qq 图多元回归,得到了下面的图。谁能告诉我为什么红线下面有两个点?这些点对我的模型有影响吗? 我使用下面的代码来绘制图表。 from sklearn.linear_model import
我确定 int q[6][4] 中的 q 的类型为 (**q)[4],即, 指向大小为 4 的整数数组的指针。但是我的书(我发现它很可疑!!)说函数定义中的 int q[][4] 部分 void fo
我试图用 tatics [intros]、[apply]、[assumption]、[destruct]、[left]、[right]、[split] 来证明这个引理,但失败了。谁能教教我怎么证明?
使用 q.all 时,我的数组中的立即函数似乎没有执行。每个函数都应该创建一个已解决的 promise ,将其打印到控制台,然后返回它。我没有看到控制台输出,但 Q.all 似乎很满意,并用 2 个空
我想在 OpenAI 的 Bipedal Walker v2 中实现 Q 学习,但在寻找教程后,它们似乎总是有限环境,这使得 Q 矩阵和奖励矩阵易于初始化。 例如:http://mnemstudio.
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在创建一个基于 AngularJS、Breeze 和 RequireJS 的单页应用程序。在使用 requirejs 设置 AMD 以使用 Angular 和 Breeze 时,我遇到了 Bree
这个问题在这里已经有了答案: Difference between defer().promise and Promise (1 个回答) 关闭 6 年前。 在 Angular 中,以下代码片段似乎
我写了一个 tcp 服务器和一个 tcp 客户端,客户端只向服务器发送数据并打印它写入了多少字节,服务器只接受连接,然后我使用 netstat 显示套接字的 Recv-Q 和 Send-问,我发现 R
我是一名优秀的程序员,十分优秀!