通常使用new Promise()
當你想換一些異步函數變成一個承諾,如:
new Promise((resolve, reject) => {
makeAjaxCall((err, data) => {
if(err) return reject(err);
else return resolve(data);
})
});
還有其他的承諾的實現,如q
,在那裏你可以創建一個「延期「對象返回一個承諾...類似的東西會是:
function makeAjaxCallPromise() {
let deferred = Q.defer();
makeAjaxCall((err, data) => {
if(err) return deferred.reject(err);
else return deferred.resolve(data);
});
return deferred.promise;
}
對於具體的事情,你想...我能想到的所有是聲明承諾函數範圍的變量外ASIGN它,像:
let resolver, rejecter;
new Promise((resolve, reject) => {
resolver = resolve;
rejecter = reject;
});
makeAjaxCall((err, data) => {
if(err) return resolver(err);
else return rejecter(data);
});
但是,這並不顯得過於好,可能會導致錯誤...嘗試來包裝你的諾言功能應有盡有。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise –
你是什麼意思「的功能外」呢?你不應該。只需做該功能的第一步。 – Bergi