承诺所有问题(我得到空的回应)

时间:2018-01-27 21:46:42

标签: promise

我该如何解决?当我试图从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;
            });
    }

1 个答案:

答案 0 :(得分:1)

  

await运算符用于等待Promise。   https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

我假设您正在使用节点的原生httphttps模块。它们确实是异步功能,但它们不能直接与等待一起使用,因为它们使用回调而不是承诺

Afaik,你可以手动&#34; promisify&#34;它与util.promisify一起使用,或使用像isomorphic-fetch这样的第三方已经为您宣传了它。

示例:

&#13;
&#13;
const sayHelloWithoutPromise = () => {
  setTimeout(() => console.log('hello'), 0)
}

(async function() {
  await sayHelloWithoutPromise()
  console.log('world!')
})()
&#13;
&#13;
&#13;

&#13;
&#13;
const sayHelloWithPromise = () => {
  return new Promise(r => 
    setTimeout(() => r(console.log('hello')), 0)
  )
}

(async function() {
  await sayHelloWithPromise()
  console.log('world!')
})()
&#13;
&#13;
&#13;