我无法理解以下代码是如何运行的.为什么"1"在"b"之后但"h"在"3"之后?订单应该是:a,b,1,2,h,3?有些文章说"事件循环队列"和"作业队列"之间的区别导致了以下输出.但是怎么样?我已经阅读了ECMAScript 2015 - 8.4工作和工作队列的规范,想知道Promise'job是如何工作的,但这让我更加困惑.有人能帮我吗?谢谢!
var promise = new Promise(function(resolve, reject) {resolve(1)});
promise.then(function(resolve) {console.log(1)});
console.log('a');
promise.then(function(resolve) {console.log(2);});
setTimeout(function() {console.log('h')}, 0);
promise.then(function(resolve) {console.log(3)});
console.log('b');
// a
// b
// 1
// 2
// 3
// h
Run Code Online (Sandbox Code Playgroud)
我知道Promise是异步的,但setTimeout(..)异步操作的回调总是在Promise的异步操作之后.为什么?
控制台输出Ignored an update to unaccepted module错误,如何解决?
log.js:25 Ignored an update to unaccepted module ./src/print.js -> 1\nlog.js:25 [HMR] The following modules couldn\'t be hot updated: (They would need a full reload!)\nlog.js:25 [HMR] - ./src/print.js\nRun Code Online (Sandbox Code Playgroud)\n\n整个控制台消息是:
\n\nlog.js:23 [HMR] Waiting for update signal from WDS...\nlog.js:23 [HMR] Waiting for update signal from WDS...\nclient?cd17:64 [WDS] Hot Module Replacement enabled.\nclient?cd17:64 [WDS] Hot Module Replacement enabled.\nclient?cd17:67 [WDS] App updated. Recompiling...\nclient?cd17:67 [WDS] App updated. Recompiling...\nclient?cd17:67 [WDS] App updated. Recompiling...\nclient?cd17:67 [WDS] App updated. Recompiling...\nclient?cd17:193 …Run Code Online (Sandbox Code Playgroud) 我最近正在学习所有权和生命周期。但我发现字符串文字有一个奇怪的情况。
//! work perfectly
fn foo() -> &'static str {
let a = "66";
&a
}
fn main() {
let b = foo();
println!("{}", b);
}
Run Code Online (Sandbox Code Playgroud)
当我像上面一样使用字符串文字时,它工作得很好。但是当我像下面这样使用它时:
//! broken
fn main() {
{
let b;
{
let a = "66";
b = &a;
}
println!("{}", b);
}
}
Run Code Online (Sandbox Code Playgroud)
它坏了,告诉我:
b = &a;
^^ borrowed value does not live long enough
Run Code Online (Sandbox Code Playgroud)
这些让我很困惑。为什么它们不同?
javascript ×2
es6-promise ×1
event-loop ×1
job-queue ×1
rust ×1
string ×1
webpack ×1
webpack-hmr ×1