2012-03-16 8 views
1

gnome-shellの拡張機能を書いています。 javascript拡張はSQLクエリを生成し、標準出力に出力をキャプチャします。 SQLクエリが0タプル/レコードに評価される場合、私の拡張はクラッシュしています。文字列に何も含まれていないjavascriptオブジェクトを変換する

以下はコードスニペットです。

let [success, out, err, error] = GLib.spawn_sync(null, ["sqlite3", "-line", places, sqlQuery], null, 4, null); 
let result = out.toString(); // Crashing here for 0 tuples. I was expecting 'result = ""' 

私はjavascript初心者です。このシナリオでオブジェクトoutの処理方法を理解していません。オブジェクトはnullではありません。それは未定義でもありません。

typeof out == null // false 
typeof out == undefined // false 
typeof out == "object" // true 

EDIT

typeof out == "null" // false 
typeof out == "undefined" // false 
typeof out == "object" // true 
+1

[typeof](http://es5.github.com/#x11.4.3)演算子は文字列を返すので、 'typeof == null'は決してtrueになりません。可能な結果(「文字列」、「オブジェクト」など)の1つに対してテストする必要があります。 '=='または '==='を使用するかどうかは、どちらもString型であるため違いはありません。 – RobG

+0

タプルがあるときとないときに、* out *にアキングされる実際の値はどれくらいですか? [letオペレータ](https://developer.mozilla.org/ja/JavaScript/Reference/Statements/let)についても読んでみてください.JavaScriptではなくECMAScriptです。 gnome-shellはどちらに基づいていますか? – RobG

+0

@RobG、タプルがあるとき、 'out'はそれらのタプルを含む文字列です。存在しないときは、 'out'への参照は、gnome-shellをクラッシュさせます。私はgnome-shellは、完全に動作するgnome-shell拡張から上記のステートメントをコピーしたので、JavaScriptに基づいていると思います。 –

答えて

0

は私がやった場合、私はクラッシュを防ぐことができることが分かったout.toString()が私に空を与えることができなかった理由を私は理解していない

let [success, out, err, errno] = GLib.spawn_sync(null, ["sqlite3", "-line", places, sqlQuery], null, 4, null); 
if (out.length > 0) { 
     let records = out.toString().split('\n\n'); 
} 

次文字列をクラッシュする代わりに、まだ。私はjavascriptとglibについてもっと学びます。

関連する問題