2017-08-15 66 views
2

是否可以從節點手冊中重寫以下HTTP請求示例以使用Async/Await而不是承諾?我熟悉使用解析/拒絕返回新的承諾方法,但寧願使用異步/等待。使用Async/Await編寫基於承諾的HTTP請求

const postData = querystring.stringify({ 
     'msg': 'Hello World!' 
    }); 

    const options = { 
     hostname: 'www.google.com', 
     port: 80, 
     path: '/upload', 
     method: 'POST', 
     headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
     'Content-Length': Buffer.byteLength(postData) 
     } 
    }; 

    const req = http.request(options, (res) => { 
     console.log(`STATUS: ${res.statusCode}`); 
     console.log(`HEADERS: ${JSON.stringify(res.headers)}`); 
     res.setEncoding('utf8'); 
     res.on('data', (chunk) => { 
     console.log(`BODY: ${chunk}`); 
     }); 
     res.on('end',() => { 
     console.log('No more data in response.'); 
     }); 
    }); 

    req.on('error', (e) => { 
     console.error(`problem with request: ${e.message}`); 
    }); 

    // write data to request body 
    req.write(postData); 
    req.end(); 
+1

您不能使用'async' /'await' *來代替承諾。您只能使用'async' /'await'語法的promise。 – Bergi

+0

如果它是一個Promise,確定你可以使用'async/await'重寫它 – Gerardo

回答

2

您發佈不使用承諾的代碼(req是事件發射器,更具體地說是ClientRequest實例),所以沒有你不能在這裏使用async/await語法。 /拒絕

我熟悉return new Promise法的決心,但寧可使用異步/等待

不,你不能使用async/await而不是Promise constructor反正。您只能將它作爲語法糖用於then調用。

+0

謝謝你的清晰。乾杯 – Kainan