2016-11-01 4 views
5

JavaScriptCoreフレームワークを使用して、次のJavaScriptコードをiOSで実行します。 javascriptコードがブラウズされます。JavaScriptCoreでJavaScriptコードを実行しているときに「組み込みコンパイルエラー」

var myCallback = undefined; 

*browserify logic* 
{ 
1: [function(require, module, exports) { 

    var q = require('./user'); 

    var p = new Promise(function(resolved, reject) { 
          myCallback = function() { 
           resolved('test'); 
          } 
         }); 

    p.then(function(x) {printFunc('test');}).catch(function(e){printFunc('test2');}); 

    q(); 

    }, { 
    "./user": 2 
    }], 
2: [function(require, module, exports) { 
    function q() { 
     printFunc("Callback called!"); 
     myCallback(); 
     printFunc("Callback called end!"); 
    } 
    module.exports = q; 
    }, {}] 
}, {}, [1]); 

printFuncはちょうどコンソールに何かを印刷しスウィフトに実装される方法です。ここで実装したものです:

let printFunction : @convention(block) (String) -> String = {input in 
     print("|\(input)|") 
     return "" 
    } 

問題は、私は、次のエラーが発生しますということです。

|Callback called!| 
Error compiling builtin: Invalid private name '@capabilities' 
|Callback called end!| 

さらに奇妙なことならば、私は版画削除することである「と呼ばれるコールバックを!」と "コールバックは終わりを呼んだ!"コードはエラーなく実行され、 "test"が出力されます。

あなたはこの奇妙な動作に遭遇しましたか?それはPromise実装の既知のバグですか?

答えて

1

これはJavascriptCoreのPromise実装のバグです。私はアップルでチケットを開け、それが確認されました。

回避策は、独自のPromise実装を使用することです。

+0

私もこの問題に取り組んでいます。プロミスの実践的な実装はありますか?またはAppleの反応のテキストで、根本的な問題を回避する方法を理解できますか? – InkGolem

+0

好奇心が強い人は、私はBluebirdのPromiseの実装を使用していました。 – InkGolem

関連する問題