bluebird - promise chain返回意外的“真实”值

时间:2014-10-17 10:04:57

标签: javascript node.js reactjs bluebird electron

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

现在我有以下情况:

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?在纯节点中测试库时,一切都很好。但是在第二次运行中,当商店保存数据时,承诺会解析为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);
    });
};

0 个答案:

没有答案