سؤال

لدي وعد بأنني سأستخدمه للقيام بمعالجة قاعدة البيانات مع النمس.باستخدام مكتبة mpromise، أنا آخذ teamMatch واستخدامه لتحديث Team وثيقة.ومع ذلك، فإن البرنامج لا يفعل أي شيء يتجاوز السطر الذي أقوم فيه بتحديث الملف Team (ابدأ بـ var getTeamPromise).

كيف يمكنني تغيير هذا الرمز حتى أتمكن من القيام بما وصفته أعلاه بسهولة أكبر؟

saveTeamMatch.then(

    function saveTeamMatchToTeam(teamMatch) {

        console.log('TEAM_MATCH in SAVE to TEAM', teamMatch); //works

        // when a team is gotten and a teamMatch is made and saved
        // save the teamMatch to the team
        var getTeamPromise = Team.findOneAndUpdate( { id:1540 }, { $push:{ matches:teamMatch } } ).exec()

        .then(

            function successfullySaveTeamMatchToTeam(team) {
                console.log('TEAM in SUCCESSFUL SAVE', team);
                getTeamPromise.resolve();
            },

            function failToUpdateTeam(err) {
                console.error( err );
                getTeamPromise.resolve();
            }

        )

        .resolve(
            function endFindMatchPromise() {
                saveTeamMatch.end();
            }
        );
    },

    function failToSaveTeamMatch(err) {
        console.error(err);
        saveTeamMatch.end();
    }

);
هل كانت مفيدة؟

المحلول

يبدو أنك أخطأت في فهم بعض الأشياء المتعلقة بالوعود:

منح getTeamPromise.then(onResolve, onReject):

  • في onResolve وonReject، تم حل/رفض الوعد بالفعل، وبالتالي لا يمكنك تغيير حالته عن طريق استدعاء العزم على نفس الوعد
  • يجب أن يكون تصميمك (function()) هو النتيجة المعالجة من نتيجة الأول
  • في العادة، لا ينبغي عليك التلاعب بحالة الوعود، والكثير من الأساليب التي تستدعيها هي طرق داخلية لإنشاء الوعود والوفاء بها.
  • سيؤدي إرجاع الوعد من معالج onResolve إلى توجيه هذا الوعد أو القيمة إلى الوعد التالي then

اسمحوا لي أن أكتب هذا بطريقة - ربما - عملية:

saveTeamMatch.then(function saveTeamMatchToTeam(teamMatch) {
    console.log('TEAM_MATCH in SAVE to TEAM', teamMatch); //works
    // when a team is gotten and a teamMatch is made and saved
    // save the teamMatch to the team
    return Team
        .findOneAndUpdate({id:1540}, {$push:{matches:teamMatch}}).exec()
        .then(function successfullySaveTeamMatchToTeam(team) {
            console.log('TEAM in SUCCESSFUL SAVE', team);
            return team;
        }, function failToUpdateTeam(err) {
            console.error('failedToUpdateTeam', err);
        });
},function failToSaveTeamMatch(err) {
    console.error('saveTeamMatch failed', err);
})
.end();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top