Насколько я могу сказать: нет, это не сработает.
Все, что делает promisify
, это превращает функцию, которая следует схеме "обратный вызов с ошибкой", в обещание.Чтобы это работало, данная функция должна:
- Принять параметры [0..n] для настройки функции
- Принять
function
в качестве последнего (или единственного)параметр
Ожидается, что функция обратного вызова, переданная как последний параметр, вызывается с помощью:
- Объект ошибки, который либо ложен (указывает на успех), либоОшибка (указывающая на ошибку)
- Любое количество дополнительных аргументов, представляющих результат функции.
Если все эти критерии выполнены, «обещанная функция» выполняет следующее:
- Вызов исходной функции со всеми заданными параметрами и собственным обратным вызовом
- Проверить, является ли первый аргумент обратного вызова ложным
- Если это так,
reject
обещание с первым аргументом - Если нет,
resolve
обещание с любыми дополнительными аргументами
Зная вышесказанное, мы легко реализуемнаша собственная "обещанная" версияМетод equest:
// untested example code!
function postData(options, data) {
return new Promise((resolve, reject) => {
const req = https.request(options);
req.on("data", (chunk) => {});
req.on("error", (err) => {
reject(err);
})
req.on("end", (res) => {
// check if result is satisfactory and either resolve/reject here
if (res.isFine) {
resolve(res);
} else {
reject(new Error("Response indicated failure"));
}
});
// Send the data off
req.write(data);
});
}
Это более многословно, чем просто вызов одной функции, но ее легко прочитать, и понятно, что делает эта функция.
Личное словосовета: держитесь подальше от таких "утилит".Если вы не понимаете, что происходит внутри вашего кода, как вы можете его отладить?Небольшая нагрузка, необходимая для создания простой оболочки, подобной этой, намного перевешивает «надежду» на то, что функция выполнит свою работу, так как вы ожидаете этого.