Обычно вы используете new Promise()
, когда вы хотите, чтобы обернуть некоторые асинхронные функции в обещание, такие как:
new Promise((resolve, reject) => {
makeAjaxCall((err, data) => {
if(err) return reject(err);
else return resolve(data);
})
});
Есть и другие варианты реализации Promise, такие как 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);
});
Но это не выглядит слишком хорошо, и может привести к ошибкам ... Попробуйте обернуть все в вашей функции Promise.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise –
Что вы имеете в виду под «внешней функции»? Тебе не следует. Просто сделайте первый шаг внутри этой функции. – Bergi