功能在请求完成之前输入

时间:2018-02-14 07:39:20

标签: 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 function promiseFunction() {
    request_test.request_test(baseUrl);
}

request_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
};

Result

2 个答案:

答案 0 :(得分:1)

如果您正在使用 async ,我会继续使用await / async语法。此外,包array_impls!不会返回承诺,您可以选择request。承诺应该是助手函数的返回值。它看起来像这样:

request-promise-native

和模块:

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();

答案 1 :(得分:1)

要使用then(),您需要返回promise。这里有一个好的旧式promise链的示例,只需从request_test返回承诺,一旦您解决或拒绝它,then()将被调用:



promiseFunction().then((result) => {
  console.log("complete");
});

function promiseFunction() {
  return request_test();
}

function request_test() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      console.log("no error");
      resolve();
    }, 1000);
  });
}




或者也许使用现代方法 - async方法来await调用返回promise的函数。



promiseFunction();

async function promiseFunction() {
  await request_test();
  console.log('complete');
}

function request_test() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      console.log("no error");
      resolve();
    }, 1000);
  });
}




您的问题来自var request_test = function check(baseUrl) { ...这个函数内部您没有返回promise,您甚至没有返回任何内容:)