0
我試圖從節點服務器發送幾個請求/響應,並且因爲它們是異步的,我不得不潛入並開始學習承諾。我使用bluebird
和node
以及request
來發送請求。承諾和代碼可讀性的節點鏈
我想建立一個證書鏈,我的服務器是代理受信任的第三方。我有以下
function send_certificates (addr) {
return send_csr_request(addr)
.then(function(csr) {
return new Promise(function(resolve,reject) {
resolve(sign_device_cert(csr))}
)}).then(function(signed_cert) {
return new Promise(function(resolve,reject) {
//another resolve here?
resolve(send_cert(signed_cert));
})
});
}
理想情況下,我想一巴掌另一個請求這個「諾言鏈」,像resolve(send_cert(caroot_cert))
,只是一般能夠修改這條產業鏈reqeust的/響應好一點。我覺得有很多樣板代碼只是爲了調用這些方法。有沒有其他的,更易於管理和可讀的方式來做到這一點?
另外我不確定是否需要promisify所有這些方法?如果說,sign_device_cert
返回一個Promise,我如何將它與.then()
調用相鏈接?
編輯
這裏是我的函數發送了一個請求..
function send_ca_cert(cert) {
const url_string = "http://myaddress.com";
var request_options = {
url : url_string,
proxy : my_proxy,
body: pki.certificateToPem(cert),
headers: { "someHeader : "somevalue"}
};
return new Promise((resolve,reject) => {
request.postAsync(request_options, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log("Sent off ca cert");
resolve();
}
reject();
});
});
}
當我打電話then(send_cert).then(send_ca_cert)
我得到的印刷品
Sent off ca cert
Sent off cert
爲什麼他們不」尊重承諾?
從resolve()函數中推斷出哪些數據會放入下一個函數中? ?如果不是所有的函數都返回一個值或解決什麼? – enrm
這似乎並不奏效。當我這樣做的時候,添加了.then(send_cert())(在第一個之後),第二個報告在第一個之前完成,即它沒有按順序完成.. – enrm
'send_cert()'!=='send_cert ' –