我的异步功能在请求完成之前输入然后。是不是那么部分代码只有在异步函数完成后才会执行?如何在所有函数执行完毕后才进行函数调用?
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
};
答案 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,您甚至没有返回任何内容:)