Обещание в nodejs не работает с ошибкой, а не с функцией

#javascript #node.js #express

#javascript #node.js #выразить

Вопрос:

Я дал обещание node.js и пытаюсь использовать его в контроллере. Но он выдал ошибку, которая 'not a function' . И вызов promises без маленькой скобки выдал ошибку 'Can't call then on undefined' .

Код обещания:

 const Subscription = require("../models/subscription");

exports.pickRandomSubscription = new Promise(function(resolve, reject) {
    let pickedSubscription = '';
    Subscription.find({}, function(err, subscriptions) {
        subscriptions.forEach(function(item) {
            pickedSubscription = item;  //get last subscription
        });
        if (pickedSubscription) resolve(pickedSubscription);
        else reject("Subscription not found");
    });
})
 

Вызов promise:

 const { pickedRandomSubscription } = require("../algo/pickSubscription");
let pickedSubscription = '';
pickedRandomSubscription().then(res => pickedSubscription = res).catch(console.log)
 

Ответ №1:

Вы экспортируете обещание напрямую, а не функцию. Вы, вероятно, хотели это сделать:

 exports.pickRandomSubscription = () => new Promise(function(resolve,reject) { ... }
 

Комментарии:

1. это не сработало @eol. опять та же ошибка «не является функцией».

2. Покажите нам, как вы импортируете pickRandomSubscription .

Ответ №2:

Вы импортировали неправильное имя обещания: pickedRandomSubscription

 const { pickedRandomSubscription } = require("../algo/pickSubscription");
 

Вы должны исправить это на: pickRandomSubscription (нет ed )

 const { pickRandomSubscription } = require("../algo/pickSubscription");