我知道在新的ES6模块语法中,JavaScript引擎不必评估代码以了解所有导入/导出,它只会解析它并"知道"要加载的内容.
这听起来像是在吊装.ES6模块是否悬挂?如果是这样,它们会在运行代码之前加载吗?
这段代码可以吗?
import myFunc1 from 'externalModule1';
myFunc2();
if (Math.random()>0.5) {
import myFunc2 from 'externalModule2';
}
Run Code Online (Sandbox Code Playgroud) import {
foobar1,
foobar2,
foobor3, //typo! this key doesn't exist in the module.
} from './module_file.js'
console.log(foobar1, foobar2, foobar3) //EXPLODES
Run Code Online (Sandbox Code Playgroud)
我在使用新的ES6样式导入语句时犯下的最常见的愚蠢错误之一就是我在对象解构中的一个键中会出现拼写错误.我想不出一个我想要在解构赋值中想要一个值的单个实例undefined.有没有办法强制导入语句失败 - 如果我尝试导入的项目之一未定义?
即:
import {
doesntExistInModule //EXPLODE NOW!
} from './module_file.js'
Run Code Online (Sandbox Code Playgroud) 我希望在调用第二个“then”时不执行第三个“then”。然而,即使承诺被拒绝(第二个“then”被调用)并且代码返回“rejected”然后“undefined”,它仍然调用第三个“then”。如何不运行第三个“then”,这样“undefined”就不会出现?
var FirstPromise = function() {
let promiseme = new Promise(function(res, rej) {
if ('a' == 'b') {
res(1);
} else {
rej('rejected');
}
})
return promiseme;
};
function succeddcallback(msg) {
return msg * 2;
}
function errorcallback(msg) {
console.log(msg);
}
FirstPromise()
.then(succeddcallback, null)
.then(null, errorcallback)
.then(function(succedded) {
console.log(succedded);
}, function(failed) {
console.log(failed);
})
Run Code Online (Sandbox Code Playgroud)