2016-04-19 7 views
1

NativeScriptベースのモバイルアプリをTypescript/JavaScriptで作成しています。このコードスニペットは、Bluetoothスキャンが完了した後に呼び出されます。私は正しいサービスを見つける必要があります。オプションから必要なサービスを選択しようとするまで、私のコードは機能します。 services.filter(function (obj) {ラインは、アプリがクラッシュする原因となっているようだが、エラーログは、私にはあまり意味がありません...ここでJavascriptフィルターアレイでエラーが発生し、クラッシュする

console.log("Connect Variable"); 
var services: Array<string>; 
var service: any; 
services = []; //initialise array 
bluetooth.connect(
    { 
    UUID: _peripheral.UUID, 
    // NOTE: we could just use the promise as this cb is only invoked once 
     onConnected: function (peripheral) { 
      console.log("------- Peripheral connected: " + JSON.stringify(peripheral)); 
      // Put all Services into an Array 
      peripheral.services.forEach(function (value) { 
       console.log("---- ###### adding service: " + value.UUID); 
       services.push(value); 
      }); 

      //search for the correct service 
      service = peripheral.services.filter(function (obj) { // <- PROBLEM LINE ****************** Caudsing the app to crash out ... 
       return obj.UUID == 'A000'; 
      }); 
     }, 
    } 
); 

は、コンソールログです:

CONSOLE LOG file:///app/Pages/Home/home.component.js:145:32: ---- ###### adding service: A000 
CONSOLE LOG file:///app/Pages/Home/home.component.js:145:32: ---- ###### adding service: 180A 
***** Fatal JavaScript exception - application has been terminated. ***** 
Native stack trace: 
1 0xbea99 NativeScript::FFICallback<NativeScript::ObjCMethodCallback>::ffiClosureCallback(ffi_cif*, void*, void**, void*) 
2 0x4ae381 ffi_closure_inner_SYSV 
3 0x4b20b8 ffi_closure_SYSV 
4 0x25e59d15 <redacted> 
5 0x25e59e4b <redacted> 
6 0x25e5f9f3 <redacted> 
7 0x208d1823 <redacted> 
8 0x208d180f <redacted> 
9 0x208dfba9 <redacted> 
10 0x20d25bdd <redacted> 
11 0x20d240d7 <redacted> 
12 0x20c732e9 CFRunLoopRunSpecific 
13 0x20c730d5 CFRunLoopRunInMode 
14 0x22263ac9 GSEventRunModal 
15 0x253380b9 UIApplicationMain 
16 0x4b202c ffi_call_SYSV 
17 0x4ae0c3 ffi_call 
18 0x91a0b NativeScript::FFICall::call(JSC::ExecState*) 
19 0x2e4931 JSC::LLInt::setUpCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind, JSC::JSValue, JSC::LLIntCallLinkInfo*) 
20 0x2e2579 llint_slow_path_call 
21 0x2ea1ed llint_entry 
22 0x2ea1f9 llint_entry 
23 0x2ea1f9 llint_entry 
24 0x2ea4c1 llint_entry 
25 0x2ea1f9 llint_entry 
26 0x2e5021 vmEntryToJavaScript 
27 0x2a4cd9 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) 
28 0x28d713 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) 
29 0x38be87 JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&, WTF::NakedPtr<JSC::Exception>&) 
30 0x9e943 NativeScript::GlobalObject::moduleLoaderEvaluate(JSC::JSGlobalObject*, JSC::ExecState*, JSC::JSValue, JSC::JSValue) 
31 0x44c4f9 JSC::ModuleLoaderObject::evaluate(JSC::ExecState*, JSC::JSValue, JSC::JSValue) 
JavaScript stack trace: 
1 [email protected]:///app/Pages/Home/home.component.js:157:55 
2 [email protected]:///app/tns_modules/nativescript-bluetooth/bluetooth.js:111:23 
3 [email protected][native code] 
4 [email protected]:///app/tns_modules/application/application.js:233:26 
5 @file:///app/tns_modules/nativescript-angular/application.js:65:26 
6 [email protected]:///app/tns_modules/zone.js/dist/zone-node.js:542:38 
7 [email protected]:///app/tns_modules/nativescript-angular/application.js:64:23 
8 [email protected]:///app/main.js:5:36 
9 [email protected][native code] 
10 [email protected][native code] 
11 @[native code] 
12 [email protected][native code] 
JavaScript error: 

私が持っているもの間違っている?

更新:ウラジミールの答えに続き

、私はこれがあります。

for (let i = 0; i < peripheral.service.count; i++) { 
    if (peripheral.services.objectAtIndex(i).UUID == 'A000') { 
     service = peripheral.services.objectAtIndex(i); 
     console.log("selected service: "); 
    } 
} 

をしかし、私はまだ、この出力を取得:

JavaScript error: file:///app/Pages/Home/home.component.js:98:56: JS ERROR TypeError: undefined is not an object (evaluating 'peripheral.service.count')

+0

「bluetooth.connect」に渡されるオブジェクトの構文は正しいですか? '})'を閉じることはできません。 –

+0

@AdityaSingh私はそう思う、それは私が入れた単なる抜粋だ。Alosは、コードがその時点まで実行されているという事実。 –

答えて

0

は、おそらくこれはNSArrayのJavaScriptのではない配列であり、それはですなぜfilter()を使用できないのですか。考えられる解決方法はネイティブのNSArrayをループし、必要なオブジェクトだけをコピーするか、すべてのオブジェクトをコピーしてからfilterを使用することです。

var services = []; 
for (let i = 0; i < peripheral.services.count; i++) { 
    services.push(peripheral.services.objectAtIndex(i)); 
} 
+0

私の質問を編集しました。あなたのソリューションが投げているエラーを見てください - あなたが一見することができたら本当に感謝します。 –

+0

このオブジェクトがNSArrayであるかどうか確認できますか? typeofの単純なconsole.logが作業を行います。 –

+0

peripheral.serviceのために 'undefined'を得ました... –

関連する問題