जब मैं अपना प्रोजेक्ट चलाता हूं, तो मुझे त्रुटि मिलती है:

(node:5795) UnhandledPromiseRejectionWarning: Error: reply interface called twice
    at Object.exports.assert (/Users/labikemmy/Downloads/React-Native-FriendChat/api/node_modules/hoek/lib/index.js:736:11)
    at Function.internals.response (/Users/labikemmy/Downloads/React-Native-FriendChat/api/node_modules/hapi/lib/reply.js:164:10)
    at bound (domain.js:301:14)
    at Function.runBound (domain.js:314:12)
    at reply (/Users/labikemmy/Downloads/React-Native-FriendChat/api/node_modules/hapi/lib/reply.js:72:22)
    at bound (domain.js:301:14)
    at runBound (domain.js:314:12)
    at result.then (/Users/labikemmy/Downloads/React-Native-FriendChat/api/node_modules/hapi/lib/handler.js:105:36)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:228:7)
(node:5795) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:5795) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
null

मुझे नहीं पता कि यह बग है या मेरी कोड त्रुटि है? मैं स्क्रीन hapi.js मुद्दों कर रहा हूँ, और किसी ने कहा कि त्रुटि बग है, दूसरे ने कहा 'उत्तर() समय एक ही अनुरोध में सीमा है'? यदि यह सीमित है, तो नीचे दिए गए कोड को कैसे बदलें?

```

export default async function (request, reply) {
    if (request.auth.credentials.email !== request.payload.email) {
        await User.findOne({ email: request.auth.credentials.email }).then(
            (user) => {
                if (user) {
                    User.findOne({ email: request.payload.email }).then(
                        (friend) => {
                            if (friend) {
                                const stringId = `${friend._id}`;
                                const friendExists = user.friends.filter(f => `${f}` === stringId).length > 0;
                                if (!friendExists) {
                                    user.friends.push(friend);
                                    user.save();
                                    reply({ friend: { fullName: friend.fullName, _id: friend._id } });
                                } else {
                                    reply(Boom.conflict('You have added already this friend'));
                                }
                             } else {
                                 reply(Boom.notFound(`Friend ${request.payload.email} doesn't exist`));
                             }
                        },
                   );
              } else {
                   reply(Boom.notFound('Cannot find user'));
              }
         },
     );
  } else {
      reply(Boom.conflict('Cannot add yourself as a friend'));
  }
}

हापी@16.4.1

0
labike 21 मई 2018, 08:48

1 उत्तर

सबसे बढ़िया उत्तर

क्या आपके पास कोई अन्य प्लगइन्स या लाइफसाइकिल हुक है जैसे प्रीहैंडलर या कुछ? हो सकता है कि आपका कोड कुछ बिंदु है जो इस त्रुटि को फेंकता है क्योंकि आप (या आपका कोड किसी भी तरह) आपकी वास्तविक प्रतिक्रिया से पहले उत्तर इंटरफ़ेस को कॉल कर रहे हैं।

साथ ही, मैंने आपका कोड दोबारा किया। आप पहले से ही JavaScript async इंटरफ़ेस का उपयोग कर रहे हैं, इसलिए आपको अपने वादों के लिए "तब" कॉल करने की आवश्यकता नहीं है।

इसे आज़माएं और देखें कि क्या निकलेगा:

export default async function (request, reply) {

    if (request.auth.credentials.email === request.payload.email) {
        return reply(Boom.conflict('Cannot add yourself as a friend'))
    }

    // I belive this is mongoose model
    const user = await User.findOne({email: request.auth.credentials.email}).exec();
    if (!user) {
        return reply(Boom.notFound('Cannot find user'));
    }

    const friend = await User.findOne({email: request.payload.email}).exec();

    if (!friend) {
        return reply(Boom.notFound(`Friend ${request.payload.email} doesn't exist`));
    }

    const stringId = `${friend._id}`;
    const friendExists = user.friends.filter(f => `${f}` === stringId).length > 0;
    if (!friendExists) {
        // hmmm shouldn't it be friend._id? user.friends.push(friend._id.toString());
        user.friends.push(friend);
        // better use this statement
        // ref: http://mongoosejs.com/docs/api.html#document_Document-markModified
        user.markModified('friends');
        await user.save();
        return reply({friend: {fullName: friend.fullName, _id: friend._id}});
    } else {
        return reply(Boom.conflict('You have added already this friend'));
    }
}
0
metoikos 21 मई 2018, 18:08