Ret*_*ode 7 javascript generator callback node.js nightmare
我试图理解回调是如何工作的,所以我创建了一个函数并传递了一个名为'callback'的第二个参数,我在函数的末尾用'callback(arr)'调用它.但是我收到的错误是:"回调不是函数"?你能告诉我我做错了什么吗?
UPDATE
vo是一个nodejs库,它接受一个生成器函数*()并运行它的所有产量.它基本上是一种处理异步代码并减少回调的方法(是的,我知道我也使用了回调,但这几乎是一个选择).一个更受欢迎的图书馆做同样的事情是co.链接到vo:https://github.com/matthewmueller/vo
var Nightmare = require('nightmare');
var vo = require('vo');
function* MyFunction(query, callback) {
arr = [];
for (i = 0; i < 1; i++) {
arr.push(yield Nightmare({
show: true
}).goto(`http://google.com`)
.inject('js', 'jquery-3.1.0.js')
.evaluate(() => {
var title;
title = 1
extend = 2
var img;
img = 3
var par;
par = 4
url = window.location.href;
var par_arr = [5, 5, 5, 5];
return {
title: title,
img: img,
par: par,
par_arr: par_arr,
url: url
}
}).end()
.catch(function(error, nightmare) {
console.error('Search failed:', error);
}))
}
callback(arr);
return arr;
}
vo(MyFunction)('query', (arr) => {
console.log(arr);
});
Run Code Online (Sandbox Code Playgroud)
这在我的环境中工作;
var vo = require('vo');
function* idMaker(query, params){
for (var i = 0; i < 5; i++) {
console.log(query);
}
params.callback("callback value");
return;
}
vo(idMaker)("param value",{callback: (value)=>console.log(value)} );
Run Code Online (Sandbox Code Playgroud)
输出:
param value
param value
param value
param value
param value
callback value
Run Code Online (Sandbox Code Playgroud)
我现在没有时间阅读“vo”文档来告诉你原因,但我在这里看到了一个例子。