我确定该问题的答案存在于某处,但不确定如何措辞该问题,并且在尝试研究回调时找不到所需的内容。
好吧,所以我刚刚开始涉猎Gulp来编译我的CSS,尽管它对JavaScript没用,但我认为它很棒!。
我的代码在下面,但是我不明白这些回调是如何工作的。如何将回调设置为参数,然后从函数内部调用?我不明白..该函数基本上是在期待什么吗?正在设置什么值或期望运行什么?我似乎无法理解。
我在JavaScript中经常看到这种情况,但是不确定它是如何工作的。我看过有关函数和回调的视频和教程,它们很有意义,但是我似乎永远找不到任何可以解释该概念的地方,这使我相信我没有在寻找正确的东西。
我也看到在Promises中设置了“ resolve”或“ reject”参数的情况,但是不确定满足条件时正在发生什么,或者设置了什么值以及在哪里设置..希望这有意义并感谢您对更好地理解这一点有所帮助。
const gulp = require('gulp');
const sass = require('gulp-sass');
const browserSync = require('browser-sync');
// TASKS
// Compile SASS
gulp.task('sass-compile', (callback) => {
gulp.src('scss/*.scss')
.pipe(sass().on('error', sass.logError))
.pipe(gulp.dest('css'))
.pipe(browserSync.stream());
console.log('******************** SCSS > CSS successful ********************');
callback();
});
// Live reload
gulp.task('browser-sync', (callback) => {
browserSync.init({
proxy: 'http://localhost/test1',
port: 80
});
callback();
});
// WATCHER
gulp.task('default', gulp.series('browser-sync', (callback) => {
gulp.watch('scss/*.scss', gulp.series('sass-compile'));
callback();
}));
答案 0 :(得分:-1)
函数是一种对象。对象是一种值。
值可以存储在变量,对象属性中,并作为参数传递给函数。
所以:
这是一个简单的函数,称为。
function foo() {
console.log("Foo");
}
foo();
这是一个简单的函数,复制到另一个变量中,称为该变量。
function foo() {
console.log("Foo");
}
const bar = foo;
bar();
现在作为参数传递给另一个函数。
function foo() {
console.log("Foo");
}
function other(bar) {
bar();
}
other(foo);
相同,但参数传递给原始函数。
function foo(baz) {
console.log("Foo: " + baz);
}
function other(bar) {
const arg = "Bar";
bar(arg);
}
other(foo);
您刚刚看过一些示例,其中负责调用回调的函数不是您编写的代码(并且您没有查看调用回调的函数的源代码)。
答案 1 :(得分:-1)
在javascript中,函数是一流的对象,这意味着它们可以传递给其他函数。在很多情况下都可以使用它,但是您所指的情况(gulp.task和新的Promise)实际上是在使用它在您的代码与其代码之间进行双向通信。当您使用gulp.task时,基本上会发生以下步骤
1)您调用gulp.task,说“我想做点工作”。您传入一个函数,说出您想做什么
2)在适当的时候,gulp.task调用您的函数,但将另一个函数传递给它,说“完成后,调用此函数以通知我”。
gulp.task的简化版本如下:
const task = (name, workToDo) => {
const done = () => {
console.log('task', name, 'has let me know its done');
}
console.log('ive been asked to start task', name);
setTimeout(() => {
console.log('500ms elapsed; starting task', name);
workToDo(done);
}, 500);
}
task('sample', (done) => {
console.log('doing work');
setTimeout(() => {
console.log('1 second has elapsed. calling back to let it know i am done');
done();
}, 1000)
});
promise的构造函数具有相似的目的。您说“我想使用下面的代码创建一个承诺”,然后它调用您的代码,并传入刚刚创建的两个函数(通常命名为resolve
和reject
)。这些用于告诉诺言“我已成功完成”或“我做错了”,从而将诺言移至已解决状态或被拒绝状态。