我该如何解决?当我试图从promise中得到一个结果时,我得到一个空数组。
async function getMessage(arr) {
let response = [];
for (let count = 0; count < arr.length; count++) {
let protocol = await arr[count].link.split(':')[0];
if (protocol === 'http') {
await http.get(arr[count].link, async (res) => {
response.push(`${arr[count].link} - ${res.statusCode}\n`);
});
} else {
await https.get(arr[count].link, async (res) => {
response.push(`${arr[count].link} - ${res.statusCode}\n`);
});
}
}
return Promise.all(response)
.then((data) => {
//data === []
return data;
});
}
答案 0 :(得分:1)
await运算符用于等待Promise。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
我假设您正在使用节点的原生http
和https
模块。它们确实是异步功能,但它们不能直接与等待一起使用,因为它们使用回调而不是承诺强>
Afaik,你可以手动&#34; promisify&#34;它与util.promisify一起使用,或使用像isomorphic-fetch这样的第三方已经为您宣传了它。
示例:
const sayHelloWithoutPromise = () => {
setTimeout(() => console.log('hello'), 0)
}
(async function() {
await sayHelloWithoutPromise()
console.log('world!')
})()
&#13;
const sayHelloWithPromise = () => {
return new Promise(r =>
setTimeout(() => r(console.log('hello')), 0)
)
}
(async function() {
await sayHelloWithPromise()
console.log('world!')
})()
&#13;