1

このコードを実行すると、Chrome Debugging Tools の結果は次のようになります。

Init が終了した後にメタデータをロードする必要がある z

「init後」は、「終了したz」コードが起動した後にのみ表示されると予想していましたが、前に戻っているようです。どうしてこれなの?(私はJSでの約束と非同期プログラミングが初めてです)

Class1.js:

 function activate()
    {
        dataServiceHelper.initBreezeMetaData().then(console.log('after Init'));
    }

dataServiceHelper.js:

function initBreezeMetaData()
{
    if (manager.metadataStore.isEmpty())
    {
        console.log('need to load metadata');
        return manager.fetchMetadata().then(function ()
        {
            console.log('loaded metadata for ' + config.serviceUrl);
        }).fin(function ()
        {
            console.log('finished z');
        });
    } else
    {
        return true;
    }

}
4

1 に答える 1

4
.then(console.log('after Init'));

ここでは、呼び出し て結果 ( ) を にconsole.log渡しています。で行ったように、コールバック関数を渡す必要があります。undefinedtheninitBreezeMetaData

dataServiceHelper.initBreezeMetaData().then(function() {
    console.log('after Init');
});

return true;

initBreezeMetaData関数が promise を返す場合、常にpromise を返す必要があります。ブール値を返すと、呼び出し元が結果に対してメソッドを呼び出したい場合に例外が発生し.thenます…</p>

于 2013-07-24T12:59:56.373 に答える