Node.js 函数在请求完成之前输入

Node.js 函数在请求完成之前输入,node.js,asynchronous,request,Node.js,Asynchronous,Request,我的异步函数进入,然后在请求完成之前进入。那么,部分代码是否应该在异步函数完成后执行?如何仅在所有函数都已完成执行时进行函数调用 app.js var request_test = require('./request_test'); baseUrl = "https://github.com"; promiseFunction().then((result)=>{ console.log("complete") }); var promiseFunction = async

我的异步函数进入,然后在请求完成之前进入。那么,部分代码是否应该在异步函数完成后执行?如何仅在所有函数都已完成执行时进行函数调用

app.js

var request_test = require('./request_test');

baseUrl = "https://github.com";
promiseFunction().then((result)=>{
    console.log("complete")
});

var promiseFunction = async function promiseFunction() {
    request_test.request_test(baseUrl);
}
请求_test.js

var request = require('request');
var cheerio = require('cheerio');

var request_test = function check(baseUrl) {
    console.log("baseUrl:" + baseUrl)
     var options = {
        url: baseUrl
     };
     request(options, function (error, response, html) {
        if (!error) {
           console.log("no error");
        }else{
        console.log("else js");
        console.log(error);
        }
      });
 }

module.exports = {
    request_test: request_test
};

如果您使用的是异步,我会继续使用wait/async语法。另外,包
request
不返回承诺,您可以选择
request promise native
。承诺应该是helper函数的返回值。它可能是这样的:

var request_test = require('./request_test');
var baseUrl = "https://github.com";

var promiseFunction = async function () {
  var result = await request_test.request_test(baseUrl);
  console.log("complete");
}

promiseFunction();
和模块:

var request = require('request-promise-native');
var cheerio = require('cheerio');

var request_test = function check(baseUrl) {
  console.log("baseUrl:" + baseUrl)
  var options = {
    url: baseUrl
  };

 return request(options).then(function (error, response, html) {
   if (!error) {
     console.log("no error");
   } else{
     console.log("else js");
     console.log(error);
   }
 });
}

module.exports = {
  request_test: request_test
};
如果您使用的是async,那么我将继续使用wait/async语法。另外,包
request
不返回承诺,您可以选择
request promise native
。承诺应该是helper函数的返回值。它可能是这样的:

var request_test = require('./request_test');
var baseUrl = "https://github.com";

var promiseFunction = async function () {
  var result = await request_test.request_test(baseUrl);
  console.log("complete");
}

promiseFunction();
和模块:

var request = require('request-promise-native');
var cheerio = require('cheerio');

var request_test = function check(baseUrl) {
  console.log("baseUrl:" + baseUrl)
  var options = {
    url: baseUrl
  };

 return request(options).then(function (error, response, html) {
   if (!error) {
     console.log("no error");
   } else{
     console.log("else js");
     console.log(error);
   }
 });
}

module.exports = {
  request_test: request_test
};
要使用
then()
,您需要返回一个。下面是一个好的老式链的例子,只需从
request\u test
返回承诺,一旦您解决或拒绝它,
then()
将被调用:

promiseFunction()。然后((结果)=>{
控制台日志(“完成”);
});
功能允诺人功能{
返回请求_test();
}
函数请求_测试(){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
console.log(“无错误”);
解决();
}, 1000);
});
}
要使用
then()
您需要返回一个。下面是一个好的老式链的例子,只需从
request\u test
返回承诺,一旦您解决或拒绝它,
then()
将被调用:

promiseFunction()。然后((结果)=>{
控制台日志(“完成”);
});
功能允诺人功能{
返回请求_test();
}
函数请求_测试(){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
console.log(“无错误”);
解决();
}, 1000);
});

}
async
没有检测完成的魔力。如果
request\u test.request\u test(baseUrl)
是一个异步函数,那么它必须返回一个在异步操作完成时满足的承诺,或者它必须接受回调。如果它返回承诺,则可以从父函数返回该承诺,然后可以在父函数上使用
.then()
。似乎您希望
promiseFunction()
能够神奇地知道何时
request\u test.request\u test(baseUrl)通过其异步操作完成。它不知道。相反,您需要进行
request\u测试。request\u测试(baseUrl)返回链接到其异步操作的承诺。然后,您可以从
promiseFunction()
返回该承诺,然后从
promiseFunction()返回该承诺。然后()
将正常工作。我们不知道需要承诺来确保其正常工作。在request_测试模块中添加了promise,并在promiseFunction中添加了wait,它可以按需要工作。感谢您指出。
async
没有检测完成的魔力。如果
request\u test.request\u test(baseUrl)
是一个异步函数,那么它必须返回一个在异步操作完成时满足的承诺,或者它必须接受回调。如果它返回承诺,则可以从父函数返回该承诺,然后可以在父函数上使用
.then()
。似乎您希望
promiseFunction()
能够神奇地知道何时
request\u test.request\u test(baseUrl)通过其异步操作完成。它不知道。相反,您需要进行
request\u测试。request\u测试(baseUrl)返回链接到其异步操作的承诺。然后,您可以从
promiseFunction()
返回该承诺,然后从
promiseFunction()返回该承诺。然后()
将正常工作。我们不知道需要承诺来确保其正常工作。在request_测试模块中添加了promise,并在promiseFunction中添加了wait,它可以按需要工作。感谢您指出。操作问题是什么是
request\u test.request\u test(baseUrl)返回。不知道这一点,这只是一个猜测。事实上,没有理由使用
wait
,因为如果它确实返回了一个承诺,那么这个承诺就可以被返回。在这种情况下,不需要
async
wait
。但是,可能它没有回报一个承诺,所以这才是真正的问题。我们不应该胡乱猜测,而应该找出事实是什么,然后写下这些事实的答案。如果您有足够的rep,我想您会知道的。它是一个节点包,假设
request
将返回一个承诺(这是错误的,因为您需要使用
request-Promise-native
包装器)。我不认为这是一个如此疯狂的假设。关于wait/async,我的观点是,从风格上讲,坚持使用一种语法比混合使用两种语法要好。谢谢您的软件包建议。我以后会调查的。至于这个问题,我没有意识到我需要承诺才能工作。为函数添加了承诺并使用了异步方法。我选择了前面的答案,但也感谢您的帮助。谢谢操作问题是什么是
request\u test.request\u test(baseUrl)返回。不知道这一点,这只是一个猜测。事实上,没有理由使用
wait
,因为如果它确实返回了一个承诺,那么这个承诺就可以被返回。在这种情况下,不需要
async
wait
。但是,可能它没有回报一个承诺,所以这才是真正的问题。我们不应该胡乱猜测,而应该找出事实是什么,然后写下这些事实的答案。你有足够的代表,我想你会知道的