我正在爲nodeJS寫一個HTTP Promises包。 我需要它承諾aplus兼容。 我使用的承諾,Aplus的檢驗 - https://www.npmjs.com/package/promises-aplus-tests你能幫助我滿足NodeJS中的aplus spec 2.2.4嗎?
我已經創建了一個適配器如下..
var adapter = {
deferred: function() {
var d = {}
d.promise = new HTTPromise(new GETOptions('/path', DEFAULT_OPTIONS));
d.resolve = executorResponseFunc;
d.reject = executorRejectFunc;
return d;
}
}
promisesAplusTests(adapter, function (err) {
done(err);
});
我的測試是在https://promisesaplus.com/#point-67
failin上 https://promisesaplus.com/#point-34 ... 進一步幫助2.2.4 onFulfilled或onRejected在執行之前不得調用 上下文堆棧僅包含平臺代碼
3.1這裏的「平臺代碼」表示引擎,環境,並承諾 執行代碼。在實踐中,這個要求確保了onFulfilled和onRejected異步執行,在事件 循環調用之後被調用,並且具有新的堆棧。這可以是使用諸如setTimeout或 setImmediate之類的「宏任務」機制或者使用諸如 MutationObserver或process.nextTick之類的「微任務」機制來實現的 。由於承諾實現 被視爲平臺代碼,因此它本身可能包含調度處理程序的任務調度隊列或「蹦牀」。
但我無法讓它通過這個承諾aplus測試。我現在用的沼澤標準的JavaScript庫的諾言(其自身通過測試)在記錄......
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise
新的承諾(執行);
new Promise(function(resolve,reject){...});
在我試圖執行...
if (response.statusCode === 200) {
process.nextTick(() => {
resolve(finalResponse);
});
} else {
process.nextTick(() => {
reject(finalResponse);
});
}
,也...
process.nextTick(() => {
if (response.statusCode === 200) {
resolve(finalResponse);
} else {
reject(finalResponse);
}
});
似乎有一個談了很多在互聯網上,但如何沒有多少代碼示例遵守。任何人都可以提供一個代碼示例請如何滿足這個測試,以及如何使用nextTick或其他合適的解決方案?
值得一提的是我有另一個調用來拒絕執行程序函數內的HTTP錯誤處理程序;
非常感謝
你爲什麼寫自己的承諾庫,而不是簡單地使用一個現有的(幷包裝HTTP的東西)?或者如果你已經在使用內建'Promise',爲什麼你要運行aplus測試呢?沒有理由使用'nextTick'和一個兼容的'new Promise'構造函數。 – Bergi
'executorResponseFunc'和'executorRejectFunc'來自哪裏?! – Bergi
你能告訴我你的完整代碼嗎?我不知道你在做什麼,或者HTTPPromise應該解決什麼問題。 – Bergi