我建立了一系列的承诺。一些承诺需要在解决之前进行 http.get() 。其他人没有这个就解决了。我将所有承诺推送到一个数组,然后进行迭代。包括 http.get() 在内的承诺仍在等待中。
我试过做promise.all。我尝试用resolve(200) 替换http.get()。这总是执行承诺。
const https = require('https');
const http = require('http');
let promises = [];
exports.RegisterHTTPDependency = function(url, name, severity) {
let promise = [];
let pr = GeneratePromise(url);
promise.push(pr, name, severity)
promises.push(promise)
}
exports.Check = function() {
let results = {};
for (let i = 0; i < promises.length; i++) {
const check = promises[i];
console.log('promise: ', check[0]) // this returns "Promise { <pending> }" or 20,
// depending on if the resolve(20) is included in GeneratePromise
}
}
let GeneratePromise = function(url){
return new Promise(function(resolve, reject) {
// resolve(20) // if I include this code, it returns 20
http.get(url, (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
resolve(resp.statusCode); // this promise does come back <pending>
});
}).on("error", (err) => {
reject(err);
});
});
}
值 20 是返回值。我希望 resp.statusCode 也成为返回值,而不是挂起。