- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白为什么这个 del 函数需要一个新函数来实现它的 promise 。下面是完整的代码。问题出在 clean 函数中。
gulp.task('styles', ['clean-styles'], function () {
log('Compiling less to css');
return gulp
.src(config.less)
.pipe($.less())
.pipe($.autoprefixer({browsers: ['last 2 version', '> 5%']}))
.pipe(gulp.dest(config.temp));
});
gulp.task('clean-styles', function (done) {
var files = config.temp + '**/*.css';
return clean(files, done);
});
gulp.task('less-watcher', function () {
gulp.watch([config.less], ['styles']);
});
////////////////
function clean(path, done) {
log('Cleaning: ' + $.util.colors.blue(path));
console.log(typeof done); // prints 'function'
del([path]).then(done); // errors
}
function log(msg) {
if (typeof msg === 'object') {
for (var item in msg) {
if (msg.hasOwnProperty(item)) {
$.util.log($.util.colors.blue(msg[item]));
}
}
} else {
$.util.log($.util.colors.blue(msg));
}
}
这是我得到的错误:
[23:28:32] Using gulpfile ~/WebstormProjects/gulp-tutorial/gulpfile.js
[23:28:32] Starting 'clean-styles'...
[23:28:32] Cleaning: ./.temp**/*.css
function
[23:28:32] 'clean-styles' errored after 36 ms
[23:28:32] Error
at formatError (/usr/lib/node_modules/gulp/bin/gulp.js:169:10)
at Gulp.<anonymous> (/usr/lib/node_modules/gulp/bin/gulp.js:195:15)
at emitOne (events.js:96:13)
at Gulp.emit (events.js:188:7)
at Gulp.Orchestrator._emitTaskDone (/home/user/WebstormProjects/gulp-tutorial/node_modules/orchestrator/index.js:264:8)
at /home/user/WebstormProjects/gulp-tutorial/node_modules/orchestrator/index.js:275:23
at finish (/home/user/WebstormProjects/gulp-tutorial/node_modules/orchestrator/lib/runTask.js:21:8)
at cb (/home/user/WebstormProjects/gulp-tutorial/node_modules/orchestrator/lib/runTask.js:29:3)
如果我像下面这样更改“clean”函数的代码,它会奇怪地解决问题。为什么它拒绝一个函数但接受另一个函数?
function clean(path, done) {
log('Cleaning: ' + $.util.colors.blue(path));
console.log(typeof done); // prints 'function'
del([path]).then(function () {
done(); // works!
});
}
即使我使用分配给变量而不是提升的函数,它仍然有效。那么为什么它不接受 promise 中的“完成”功能呢?这让我很困惑。
function clean(path, done) {
log('Cleaning: ' + $.util.colors.blue(path));
console.log(typeof done); // prints 'function'
var test = function () {
done();
}
del([path]).then(test);
}
----------已解决----------
感谢 Johannes Merz 为我回答这个问题。我认为“完成”函数是我的回调,但我错了。它属于 gulp,因此要模拟问题,请检查下面的新“clean”功能。
function clean(path, done) {
log('Cleaning: ' + $.util.colors.blue(path));
del([path]).then(function (val) {
console.log(val);
done('Not null or undefined so this will fail it');
// done(); but this would work!
});
}
基本上,promise 会将一个参数传递给promise 使用的函数。这把事情搞砸了,因为“完成”回调认为该参数是错误消息或对象。现在这对我来说非常有意义。
done(err);
因此,如果 'err' 为 null 或未定义,我们不会有任何问题。问题是 Promise 不知道这一点。 Promise 传递的是一条消息,而不是一个错误,但完成函数认为它是一个错误,所以它会出错。
问题已解决:)
最佳答案
这是因为 del 函数解析了带有值的 Promise。看一下文档,done 如果传递了 undefined 则认为成功:
https://github.com/gulpjs/gulp/blob/master/docs/API.md#accept-a-callback
因此,如果您直接将 did 传递给 then block ,则调用 done('some value that isn't undefined')
,这在调用 done();< 时被视为错误
如果你将它包装在一个额外的函数中。尝试一下
del([path]).then(function (delResult) {
console.log(delResult);
done(); // works!
});
查看返回的内容。
关于javascript - NodeJS del 模块 Promise 需要明确的 Promise 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42868752/
我在 linux 上工作。我对windows没有太多想法。 windows中文件的权限是如何组织的?我们在unix中是否有像chmod这样的api来更改权限? 最佳答案 对于 Windows,有一个名
应用程序编程接口(interface) (API) 是一组用于访问基于 Web 的软件应用程序的编程指令和标准。 如果出现 ,有人可以向我解释一下吗?谷歌地图 或 优酷 这是API哪个是softwar
我有两个应用程序,A 和 B,它们使用 android 库 C。B 有一个服务 A 想通过 C 使用,例如 在我的库中有一个类试图将它绑定(bind)到服务,
我正在正常或安全模式下启动相机应用程序,具体取决于使用我的应用程序执行的手势,但一旦用户选择应用程序并点击始终,则没有选项可以更改默认值,即使是从 Android 的设置菜单中也是如此. camera
我有一个数据集,本质上是一个稀疏二进制矩阵,表示两个集合的元素之间的关系。例如,让第一组是人(用他们的名字表示),例如像这样的东西: people = set(['john','jane','mike
何为pythonic? pythonic如果翻译成中文的话就是很python。很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等。 我的理解为,很+名词表达了一种特殊和强调的意味。
某些 Prolog 目标的确定性成功问题已经一次又一次地出现在 - 至少 - 以下问题: Reification of term equality/inequality Intersection an
我指的是 DateTime.TryParse(string s, out DateTime result) 重载,它尝试从字符串中解析 DateTime - 没有特定的格式正在指定。 我可以从http
2020 年 04 月 10 日,《中共中央国务院关于构建更加完善的要素市场化配置体制机制的意见》正式公布,将数据确立为五大生产要素(土地、资本、劳动力以及技术)之
有人可以解释一下 NSNotification 的 addObserver 函数中 notificationSender 的用途吗? 这是 Apple 文档的解释: notificationSende
我是一名优秀的程序员,十分优秀!