通常使用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