2016-12-03 2 views
1

Я использую метеорит с угловым2 с помощью машинописного текста es6, и я столкнулся с этой ошибкой при написании метеорного метода для асинхронной функции. Я столкнулся с проблемой синхронизации в запросе на вставку, потому что он не снабжает меня ошибкой при вставке, когда имя совпадает. Поэтому я решил использовать волокна и будущее, но машинопись продолжает давать мне ошибку, что он не может найти модуль для волокон/будущего. Я попытался метеор НОЙ установки волокна, метеоритных НОГО установить будущее, метеора добавить ostrio: [email protected] , но ничего не работает. Если есть какое-либо решение для этого, пожалуйста, скажите мне. и если есть какой-либо другой подход, который я могу использовать для решения этой проблемы, пожалуйста, дайте мне знать.Метеор: не удается найти модуль волокна/будущее при написании метода метеор в машинописных текстах

import { Emails } from '../collections/emails.collection'; 
import { check } from 'meteor/check'; 
import { Meteor } from 'meteor/meteor'; 
import Future from 'fibers/future'; 

Meteor.methods({ 
    loadEmailTemp: function(tempn: string){ 
    let temp = Emails.findOne({tempname: tempn}); 
    return temp; 
    }, 
    getAllTemplates: function() { 
    let temps = Emails.find({}).fetch(); 
    return temps; 
    }, 
    newTemplate: function(tempn: string) { 
    let err = false; 

    let result = Emails.insert({ 
     tempname: tempn, 
     subject: '', 
     text: '' 
    }, function(error, result){ 
     if(error){ 
     console.log("ERROR",error); 
     err = true; 
     } 
     if(result) console.log("RESULT",result); 
    }); 
    return result; 
    } 
}); 

Моя ошибка

W20161203-13:15:44.055(5.5)? (STDERR)  /Users/exMachina/.meteor/packages/meteor-tool/.1.4.2_1.1ulueqv++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:280 
W20161203-13:15:44.056(5.5)? (STDERR)      throw(ex); 
W20161203-13:15:44.056(5.5)? (STDERR)      ^
W20161203-13:15:44.057(5.5)? (STDERR) 
W20161203-13:15:44.057(5.5)? (STDERR) Error: Cannot find module 'fibers' 
W20161203-13:15:44.058(5.5)? (STDERR)  at Function.Module._resolveFilename (module.js:325:15) 
W20161203-13:15:44.058(5.5)? (STDERR)  at Function.Module._load (module.js:276:25) 
W20161203-13:15:44.058(5.5)? (STDERR)  at Module.require (module.js:353:17) 
W20161203-13:15:44.059(5.5)? (STDERR)  at require (internal/module.js:12:17) 
W20161203-13:15:44.059(5.5)? (STDERR)  at Object.<anonymous> (/Users/exMachina/.meteor/packages/ostrio_neo4jdriver/.1.0.2.1tve9ie++os+web.browser+web.cordova/npm/node_modules/neo4j-fiber/lib/helpers.js:33:11) 
W20161203-13:15:44.059(5.5)? (STDERR)  at Object.<anonymous> (/Users/exMachina/.meteor/packages/ostrio_neo4jdriver/.1.0.2.1tve9ie++os+web.browser+web.cordova/npm/node_modules/neo4j-fiber/lib/helpers.js:62:4) 
W20161203-13:15:44.060(5.5)? (STDERR)  at Module._compile (module.js:409:26) 
W20161203-13:15:44.060(5.5)? (STDERR)  at Object.Module._extensions..js (module.js:416:10) 
W20161203-13:15:44.067(5.5)? (STDERR)  at Module.load (module.js:343:32) 
W20161203-13:15:44.067(5.5)? (STDERR)  at Function.Module._load (module.js:300:12) 

ответ

1

Я не знаю, что случилось с вашим кодом, это хорошо выглядит. Поэтому я даю рекомендации по другим подходам:

  • Использование обещаний: методы Метеор играют хорошо с обещанием. Так что, если вы запрашиваете к REST API и хотите ждать результатов для дальнейших операций, Promise будет отлично подходит:

    import fetch from 'node-fetch'; 
    
    Meteor.methods({ 
        getFromApi() { 
        retrun fetch('https://link.to/api-endpoint').then((result) => { 
         // ... 
         return result; // send result to client callback 
        }).catch((error) => { 
         // handle error 
         throw error; 
        }); 
        } 
    }); 
    
  • Meteor также способ иметь дело с асинхронной операцией, это Meteor.wrapAsync:

    import fetch from 'node-fetch'; 
    
    const fetchSync = Meteor.wrapAsync(fetch); 
    
    Meteor.methods({ 
        getFromApi() { 
        const result = fetchSync('https://link.to/api-endpoint'); 
        // ... 
        return result; 
        } 
    });