1

我正在使用 ReactJs编写一个atom-shell应用程序。因此我写了2 simple node.js-modules. 第一个获取 XML api 并返回一个对象数组。第二个是一个简单的数据存储,它应该保存获取的数据集。两个模块都是异步的,使用bluebird.

现在我有以下情况:

var Promise = require('bluebird');

store.get()
.tap(print)  //#1: []
.then(function (data) {
    if (data.length) {
        return Promise.resolve(data);  //#6: ? also true in the second run ?
    } else {
        return xmlApi.get()
        .tap(print)  //#2: [...]
        .then(store.insert)  // <-- this returns an array with inserted indices
        .tap(print) //#3: [...]
        -then(store.write)  // <-- this returns all stored objects as array
        .tap(print) //#4: true <-- ? this is, what I doesn't understand... ?
    }
})
.tap(print)  //#5: true
.then(function (data) {
    //Under normal circumstances, I would set ReactJs state from data array...
})
.catch(handleError)
.done();

我的问题是要理解,为什么除了第 3步之外,一切都解决了,true而不是arrays with values?在纯节点中测试库时,一切都很好。但同样在第二次运行中,当 store 保存数据时,promise 解析为true...

更新:

store.write

var write = Promise.promisify(require('fs').writeFile)

Store.prototype.write = function () {
    return write(this.filename, JSON.stringify(this.data))
    .bind(this)
    .then(function () {
        return Promise.resolve(this.data);
    });
};
4

0 回答 0