2016-04-14 10 views
1

私はluaに公開したいnodejsコードにある非同期関数の大きなコレクションを持っています。基本的な考え方は、luaスクリプトを実行して、それらのスクリプトが私のnodejsコードの一部にコールバックし、実行されたluaスクリプトから値を非同期的に返すことです。カスタムノードのアドオンとエクステンションとのバインド

この例ではmyCustomNodejsAddonは私が書いたカスタムアドオンは、luaをバインドしてluaスクリプトを実行する方法を知っています。未解決の問題の1つは、luaスクリプトから値を非同期的に返す方法です。

誰もこれの前に何かをしましたか?私は非常にポインタ、思考、例に興味があります。より良い例と

EDIT:1は、この問題へのアプローチよりも

-- user written lua script 
getUser(1, function(err, user) 
    if err then 
     print('Error', err) 
    else 
     print('Found user with id', user.id) 
     return '' 
    end 
end) 
/*Create object with mapping of async functions*/ 
var callbacks = { 
    "getUser": function(userId, cb) { 
     db.Users.fetchById(userId).then(function(user) { 
     cb(null, user); 
     }, function(err) { 
     cb(err, null); 
     } 
    } 
}; 
myCustomNodejsAddon.provideCallbacks(callbacks); 

/* user written lua script has been stored into `scriptSrc` variable */ 
myCustomNodejsAddon.execute(scriptSrc, function(returnValueOfScript) { 
    console.log('done running user script: ', retrunValueOfScript); 
}); 

答えて

0

もっと私の心に来ます。

最初に、プログラムコマンドライン引数または入力ストリームを読み込んでこのチャネルで指定されたコードを実行し、応答をJSON形式でストリームするnodejsスクリプトを作成します。これはあまり侵略的ではありません。使用例がなる

if(require.main === module){ 
    // asume first argument to be the source module for the function of iterest 
    var mod = require(process.argv[2]); 
    var fnc = mod[process.argv[3]]; 

    args = process.argv.slice(4); 

    // by convention the last argument is a callback function 
    args.push(function(){ 
     console.log(JSON.stringify(arguments)); 
     process.exit(); 
    }) 

    fnc.apply(null, args); 
} 

::これは、ファイルとacording [ヌル、[ 'FILE1'、 'FILE2']]のようなもので応答します

$ node my-script.js fs readdir /some/path 

スクリプトは次のようになります/some/pathにあります。次に、このスクリプトを使用してinvoqueノードであるluaモジュールを作成し、呼び出す関数に応じてパラメータを渡すことができます。

+0

これは、質問の「非同期」部分をどのように処理するのでしょうか?このプロセスのルア側はどのように見えますか? –

+0

これは、コールバックが呼び出されるとNodejsプロセスが出力ストリームに書き込むという意味で、質問の非同期部分を処理します。したがって、非同期的に結果を生成する。私はLuaを使用しない時間があるので、その部分を実装する方法がわからない – yeiniel

+0

ここで与えられた答えを使うことができるかもしれないhttp://stackoverflow.com/questions/2829404/how-do-i-run -an実行-LUA使用して、あなたの提案は包丁がありながら – yeiniel

関連する問題