簡體   English   中英

產生者,諾言和共同收益

[英]generators, promises and co or then-yield

我正在編寫一個nodejs程序,需要在初始化期間獲取一些配置數據,以便我可以實例化一個單例。 配置數據作為一個承諾返回,這意味着我必須即時初始化事情,而不是在需要的時間初始化,以便我可以module.exports = () => return new blah(config) 我不希望工廠返回thenable-我希望它返回構造函數的新實例。

我有一個內部庫來獲取配置數據並返回一個Promise。 我正在嘗試使用cothen-yield或類似的庫,以便我可以將它們看作是同步的(我認為這是這些庫的用途,但也許我的理解是有缺陷的),主要是因為我可以返回實例的工廠,不返回與實例解析的promise

簡化代碼:

配置閱讀器:

var read = function () {
  let c = projectConfig.load(); //returns a promise that resolves with config data
  return c;
});

module.exports = {read};

廠:

let factory = ty.async(function * factory () {
  let cfg = yield configHelper.read();
  console.log('config', cfg)
  return new Constructor(cfg);
})

module.exports = () => factory()

指數:

let factory = require('factory')()
console.log(factory)

當我運行程序時,我得到以下輸出

Promise {
    _d: {
        p: [Circular],
        c: [],
        a: undefined,
        s: 0,
        d: false,
        v: { cdn: [Object] },
        h: false,
        n: false
    }
} // this is from the main module

config { /* correct config object data here */ } //this is from factory

通過查看有關此的各種博客文章,我希望factory通過使用then-yield或co可以返回帶有正確配置參數的構造函數。 但看起來公司或公司什么也沒做,卻獲得了收益結果。

我誤會了什么?

我誤會了什么?

async功能的結果將只是Promise。 因此,您只能使用then處理程序才能訪問async函數的結果值。

就你而言

let factory = require('factory')()

factory.then((consObj) => // use the Constructor object)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM