我正在使用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);
});
};