簡體   English   中英

Meteor同步執行系統命令

[英]Meteor execute system command synchronously

我用c ++構建了一個簡單的模型,我希望meteor與之交互。 目前,該模型作為命令行運行,一切運行良好,但調用命令行是異步完成的。 該模型非常快,因此我不需要結果進行回調,而且在此過程中涉及回調使得流星的數據庫訪問更加復雜,這是我想要避免的。

所以,我們只是進入常規問題:如何在javascript中制作異步同步...

我知道這已經使用節點進行了討論,這個主題已在這里得到解答: node.js同步執行系統命令

這就是說,如何在流星內實際/設置這個?

我們應該使用npm安裝軟件包,但是當Meteor改變它的分發系統時,它是什么讓它自己處理npm軟件包? 看看這里 ,看看我說的是,我一直沒能找到有關這個package.js任何相關信息

為了避免安裝外部軟件包,我考慮使用由meteor內部使用的Fibers ,但仍然:有人有一個關於如何用它封裝異步調用的例子嗎? 最后但並非最不重要的是,Fibers開發人員幾乎建議我們不要直接使用Fiber進行編碼,而是使用其他已經使用過的子工具...為什么不呢,但我回到了關於如何包含npm包的問題

我的代碼看起來像這樣(有點簡化):

function callToEngine(argument, callback)
            {
               var result = null;
               var modelPath = "/some/where"

               var require = Npm.require;
               var spawn = require('child_process').spawn;
               var model = spawn(modelPath, []);
               var answerBuffer = "";

               engine.stdin.write(argument);
               engine.stdin.end(); //flush

                engine.stdout.on('data', function(data)
                {
                    answerBuffer+=data;
                });

                engine.stderr.on('data', function(data)
                {
                    console.log('stderr: ' + data);
                });

                engine.on('close', function(code)
                {
                    result = JSON.parse(answerBuffer);
                    console.log('child process exited with code ' + code);
                    callback(result);
                });
            }

我希望有類似的東西:

var result = callToEngine(argument);

你可以使用未來:

function callToEngine(argument) {
    var Future = Npm.require('fibers/future');

    var fut = new Future();


    ///do stuff

    engine.on('close', function(code)
            {
                result = JSON.parse(answerBuffer);
                console.log('child process exited with code ' + code);
                fut.return(result);
            });

    return fut.wait();
}

然后簡單地使用:

var result = callToEngine(argument);

未來將確保返回只會在fut.return運行時返回一些東西

有關Meteor異步指南中其他設計的更多信息: https//gist.github.com/possibilities/3443021

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM