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