2016-04-14 32 views
1

ben Lua maruz istiyorum nodejs kodunda sahip asenkron fonksiyonların geniş bir koleksiyona sahip olan Lua. Temel fikir, lua betiklerini çalıştırmak ve bu betiklerin benim nodejs kodumun bir kısmına geri çağrılmasını ve aynı zamanda çalıştırılan bir lua betikinden bir eşzamansız olarak bir değer döndürmesini sağlamaktır. Bu örnekte myCustomNodejsAddon bu örnekte myCustomNodejsAddon olacaktır. Yazdığım özel eklenti, lua'yı nasıl bağlayacağını ve lua komut dosyalarının nasıl çalıştırılacağını bilir. Önde gelen bir soru, bir lua betiğinden asenkronize bir değeri nasıl döndürürüm? Cilt özel düğüm eklenti uzantıları

kimse önce böyle bir şey yaptı? Herhangi bir işaretçiye, düşünceye, örneğe çok ilgi duyarım. Daha iyi örnekle

DÜZENLEME: kimse bu soruna yaklaşımları daha

-- 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); 
}); 

cevap

0

Daha aklıma geliyor. Birincisi, program komut satırı argümanlarını veya giriş akışını okuyan ve bu kanal tarafından gösterilen kodu yürüten ve cevabı JSON formatında tekrar aktaran bir nodejs betiği oluşturmak olacaktır. Bunu yapmanın daha az istilacı yolu budur. Bir örnek kullanım olacaktır

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); 
} 

: Bu dosyalarla acording [null, [ 'Dosya1', 'Dosya2']] gibi bir şey ile cevap verecektir

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

senaryo gibi bir şey olurdu /some/path numaralı telefondan. Daha sonra bu betik ile inode düğümünü ve parametreleri aramak istediğiniz işlevlere göre ileten bir lua modülü oluşturabilirsiniz.

+0

Bu nasıl soru 'async' kısmını ele ki? Bu sürecin lua tarafı neye benziyor? –

+0

Bu, Nodejs işleminin yalnızca geri çağrı çağrıldığında çıktı akışına yazacağı anlamında, sorunun async kısmını ele alacaktır. Böylece asenkronik olarak sonuç elde edilir. Orada ben Lua kullanmayan bazı zamanıdır, bu yüzden – yeiniel

+0

Burada verilen cevap kullanabilirsiniz olabilir o kısmı http://stackoverflow.com/questions/2829404/how-do-i-run uygulamıyor emin howto değilim -an-çalıştırılabilir-lua kullanarak öneri satır ise – yeiniel