此函数返回持续时间:
getEventLog.getId(uuid, function(err, id){
if(err) return console.log(err)
getEventLog.getDuration(id, function(err, duration, callback){
if(err) return console.log(err)
})
});
如果我在console.log(duration)
下面添加if(err) return callback(duration)
,我可以看到它的价值。
我想在其他函数中使用它作为变量。我尝试将整个函数设置为这样的值:
var duration = getEventLog.getId(uuid, function(err, id){
if(err) return console.log(err)
getEventLog.getDuration(id, function(err, duration, callback){
if(err) console.log(err)
control.log(duration)
})
});
虽然没用。然后我认为回调可能是方式,但不能让一个工作。这是我的尝试:
getEventLog.getId(uuid, function(err, id, callback){
if(err) return console.log(err)
getEventLog.getDuration(id, function(err, duration, callback){
if(err) console.log(err)
callback(duration)
})
});
如何更改此设置以便我可以使用持续时间值?
其他信息
如果我尝试回电话,我有
getEventLog.getId(uuid, function(err, id, callback){
if(err) return console.log(err)
getEventLog.getDuration(id, function(err, duration){
if(err)
var dur = duration
callback(dur)
})
});
var myVal = getEventLog.getId(function(dur) {
console.log("myVal: " + dur)
});
我明白了:
模块/ getEventLog.js:36 callback(null,arrFound); ^
TypeError:回调不是函数
如果我尝试返回,我会得到:
getEventLog.getId(uuid, function(err, id, callback){
if(err) return console.log(err)
getEventLog.getDuration(id, function(err, duration){
if(err) return duration
})
});
var myVal = getEventLog.getId()
console.log("myVal: " + myVal)
我也得到:
模块/ getEventLog.js:36 callback(null,arrFound); ^
TypeError:回调不是函数
我认为删除return console.log(err)
后可能会抛出它。
为愚蠢的问题道歉,但我是Node.js的新手。我哪里错了?
我在下面包含了getEventLog以供参考:
var http = require("http");
var fs = require('fs');
var async = require('async');
var readline = require('readline')
//var db = require('./dbPool');
//get file name
var options = {
"method" : "GET",
"hostname" : "127.0.0.1",
"port" : "18080",
"path" : "/api/v1/applications/"
};
exports.getId = function (uuid, callback) {
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = JSON.parse(Buffer.concat(chunks));
var arrFound = Object.keys(body).filter(function(key) {
if (body[key].name.indexOf(uuid) > -1) {
return body[key].name;
}
}).reduce(function(obj, key){
obj = body[key].id;
return obj;
}, {});
callback(null, arrFound);
});
});
req.end();
}
exports.getDuration = function (myId, callback) {
//getEventLog.getId(function(err, id){
//get file name
var options = {
"method" : "GET",
"hostname" : "127.0.0.1",
"port" : "18080",
"path" : "/api/v1/applications/" + myId
};
var req = http.request(options, function (res) {
console.log(options)
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = JSON.parse(Buffer.concat(chunks));
var attempts = body.attempts
var arrFound = Object.keys(body).filter(function(key) {
return attempts[0].duration;
}).reduce(function(obj, key){
obj = body.attempts[0].duration;
return obj;
}, {});
//console.log(arrFound);
callback(null, arrFound);
});
});
req.end();
// })
};
答案 0 :(得分:0)
你应该重新思考你想要达到的目标。您描述,您想要一个返回值,但不要return
任何东西。你执行一个回调函数(也没关系)。
函数可以返回如下值:
function foo() {
return 'bar';
}
var value = foo(); // value === 'bar'
或者您可以执行回调函数(主要是异步)并将“返回值”作为参数放入其中,因此:
function foo(callback) {
// do some stuff here
var duration = 123;
callback(duration);
)
// executing foo, putting a callback function into it
foo(function(duration)) {
// duration will be 123 here
});
编辑:请注意,您应始终只显示代码的最低限度,这是了解问题所必需的。 你实际上正在思考和编码,但是你的函数调用是错误的(在编辑之前我才知道)。
getEventLog.getId(uuid, function(err, id, callback){
if(err) return console.log(err)
getEventLog.getDuration(id, function(err, duration){
if(err)
var dur = duration
callback(dur)
})
});
/*
* take a look at this line:
* your function requires your first parameter to be an `uuid`,
* but you simply skipped it. Now your second parameter is null,
* resulting in "callback is not a function"-error.
*/
var myVal = getEventLog.getId(function(dur) {
console.log("myVal: " + dur)
});
只需将uuid
作为第一个参数并将callback
函数作为第二个参数传递,即可正确调用您的函数。