then() 未在 promise 函数上触发
then() is not being triggered on a promise function
我在我的应用程序中使用了 promise 函数。下面附上我的代码:
module.exports = function (path)
{
return new Promise(function(resolve, reject)
{
fs.readFileAsync(path, encoding='UTF-8')
.then(function(data) {
return wmReuters.parseXMLtoJSON(data);
}).then(function(jsonedData) {
return new Promise(function(resolve, reject) {
resolve({
'name': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].slugline[0]['_'],
'description': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].headline[0]['_'],
'date': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].firstCreated[0],
'ingestDate': new Date(),
'lastModified': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].versionCreated[0],
'sourceId': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].altId[0]['_'],
'sourceNmae': 'Reuters',
});
});
}).catch(function(err) {
reject(new Error('Parsing Error: ' + err));
});
});
}
我在另一个文件中调用了这个函数(这个函数作为解析器导入)
parser('./Ingestor/XMLs/2014script/2014-01-01T000815Z_3_WNE9CUATJ_RTRWNEC_0_2210-UAE-DUBAI-NEW-YEAR-FIREWORKS.XML').then(function(obj) {
console.log(obj);
}).then(function(clip) {
console.log(clip);
}).catch(function(err) {console.log(err);})
永远不会触发解析器之后附加的第一个 then()。我想知道我的代码有什么问题(我猜 resolve 可能有问题,但我不确定在哪里)
您永远不会解决返回的最高承诺,因此永远不会调用调用者的 .then()
处理程序。您可以通过返回 fs.readFileAsync()
promise have 来使用已有的承诺,而不是创建新的承诺:
module.exports = function (path) {
return fs.readFileAsync(path, encoding='UTF-8')
.then(function(data) {
return wmReuters.parseXMLtoJSON(data);
}).then(function(jsonedData) {
return {
'name': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].slugline[0]['_'],
'description': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].headline[0]['_'],
'date': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].firstCreated[0],
'ingestDate': new Date(),
'lastModified': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].versionCreated[0],
'sourceId': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].altId[0]['_'],
'sourceNmae': 'Reuters',
};
});
}).catch(function(err) {
throw (new Error('Parsing Error: ' + err));
});
}
仅供参考,您可能在 sourceNmae: 'Reuters'
中有拼写错误。
我在我的应用程序中使用了 promise 函数。下面附上我的代码:
module.exports = function (path)
{
return new Promise(function(resolve, reject)
{
fs.readFileAsync(path, encoding='UTF-8')
.then(function(data) {
return wmReuters.parseXMLtoJSON(data);
}).then(function(jsonedData) {
return new Promise(function(resolve, reject) {
resolve({
'name': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].slugline[0]['_'],
'description': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].headline[0]['_'],
'date': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].firstCreated[0],
'ingestDate': new Date(),
'lastModified': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].versionCreated[0],
'sourceId': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].altId[0]['_'],
'sourceNmae': 'Reuters',
});
});
}).catch(function(err) {
reject(new Error('Parsing Error: ' + err));
});
});
}
我在另一个文件中调用了这个函数(这个函数作为解析器导入)
parser('./Ingestor/XMLs/2014script/2014-01-01T000815Z_3_WNE9CUATJ_RTRWNEC_0_2210-UAE-DUBAI-NEW-YEAR-FIREWORKS.XML').then(function(obj) {
console.log(obj);
}).then(function(clip) {
console.log(clip);
}).catch(function(err) {console.log(err);})
永远不会触发解析器之后附加的第一个 then()。我想知道我的代码有什么问题(我猜 resolve 可能有问题,但我不确定在哪里)
您永远不会解决返回的最高承诺,因此永远不会调用调用者的 .then()
处理程序。您可以通过返回 fs.readFileAsync()
promise have 来使用已有的承诺,而不是创建新的承诺:
module.exports = function (path) {
return fs.readFileAsync(path, encoding='UTF-8')
.then(function(data) {
return wmReuters.parseXMLtoJSON(data);
}).then(function(jsonedData) {
return {
'name': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].slugline[0]['_'],
'description': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].headline[0]['_'],
'date': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].firstCreated[0],
'ingestDate': new Date(),
'lastModified': jsonedData.newsMessage.itemSet[0].packageItem[0].itemMeta[0].versionCreated[0],
'sourceId': jsonedData.newsMessage.itemSet[0].packageItem[0].contentMeta[0].altId[0]['_'],
'sourceNmae': 'Reuters',
};
});
}).catch(function(err) {
throw (new Error('Parsing Error: ' + err));
});
}
仅供参考,您可能在 sourceNmae: 'Reuters'
中有拼写错误。