Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs中的另一个文件中获取嵌套回调结果?_Javascript_Node.js_Express_Callback - Fatal编程技术网

Javascript 如何在nodejs中的另一个文件中获取嵌套回调结果?

Javascript 如何在nodejs中的另一个文件中获取嵌套回调结果?,javascript,node.js,express,callback,Javascript,Node.js,Express,Callback,所以我的API代码在这个文件API.js中 api.js var express = require('express'); var Vimeo = require('vimeo').Vimeo; var lib = new Vimeo('dfdfdfdfdfdfd', 'WDIt+kEVudfghjklkjhgfdfghjkjhgfMaG9X3Ml', 'jhjhjhjhjhjhgfg'); var app = express(); app.listen(9999); var result

所以我的API代码在这个文件API.js中

api.js

var express = require('express');
var Vimeo = require('vimeo').Vimeo;
var lib = new Vimeo('dfdfdfdfdfdfd', 'WDIt+kEVudfghjklkjhgfdfghjkjhgfMaG9X3Ml', 'jhjhjhjhjhjhgfg');

var app = express();

app.listen(9999);
var results =
    app.get('/api', function (req, res) {
        lib.request(/*options*/{
            // This is the path for the videos contained within the staff picks channels
            path: '/channels/staffpicks/videos',
            // This adds the parameters to request page two, and 10 items per page
            query: {
                page: 1,
                per_page: 2,
                fields: 'uri,name,description,duration,created_time,modified_time'
            }
        }, /*callback*/function (error, body, status_code, headers) {
            if (error) {
                // console.log('error -------------------------------------');
                // console.log(error);
            } else {
                console.log(body); //how to get this in server.js
                res.send(JSON.stringify(body['data'])); //how to get this in server.js

            }
        });

    });
console.log("Server is listening");
module.exports = {
    results: results,
}
server.js

var api = require('./vimeo/api.js');
var a  =  api.results;
//blah blah
 console.log(a);// how to get calback data from api.js function here?
 }));
var api = require('./vimeo/api.js');
module.exports = function(data){
  var a  =  api.results;
 console.log(data); //your async data

}

如何访问server.js中api.js中可用的console.log值?

您可以在server.js中导出函数,并在可用时从api.js传递异步数据

server.js

var api = require('./vimeo/api.js');
var a  =  api.results;
//blah blah
 console.log(a);// how to get calback data from api.js function here?
 }));
var api = require('./vimeo/api.js');
module.exports = function(data){
  var a  =  api.results;
 console.log(data); //your async data

}
和内部api.js

//after you receive the data
else {
  var serverModule = require('./server');
  serverModule(data); //call the method
  res.send(JSON.stringify(body['data']));
}
将你的
app.get()
调用包装成
Promise
如下:

var results =
  new Promise(resolve => app.get('/api', function (req, res) {
    ...
  }));
然后替换
console.log(body)带有:

resolve(body);
现在,
results
是一个
Promise
,因此在解决以下问题后,它将在
server.js中可用:

var api = require('./vimeo/api.js');
api.results.then((a) => {
  console.log(a);
});

假设
api.js
server.js
都在同一个进程上运行,您可以向
server.js
添加一个函数,通过将它包装在一个可以调用钩子函数的函数中,来截获写入
process.stdout
的任何内容,该钩子函数需要返回写入
process.stdout
的原始参数,这样它就不会中断
console.log()

我如何使用它的一个例子是截取任何记录到控制台的内容并将其写入文件。它不需要在您想要截取
console.log()
的任何文件中包含任何进一步的代码,因为它可以跨写入同一进程上运行的
process.stdout
的任何文件工作

function hookStdOut(hook => {
  process.stdout.write = (write => {
    return (...args) => {
      args[0] = hook[args[0]]
      write.apply(process.stdout, args)
    }
  })(process.stdout.write)
}

hookStdOut(chunk => {
  // access whatever was being written to stdout and process
  // you cannot use console.log within this function 
  // because it will result in an infinite loop since 
  //console.log writes to process.stdout

  // return the chunk so it will be written back to process.stdout
  return chunk
})

你能发布server.js的全部内容吗?这是我在server.js中的全部内容。我更喜欢快速方式。很抱歉最初没有标记为express。@Mike“express way”是什么意思?