我第一次使用.then而不是。然后我使用回调函数。
以下是我的代码段:
phantom.create().then(function (ph) {
ph.createPage().then(function (page) {
page.open("http://codebeautify.org/xmlvalidator").then(function (status) {
page.render(base_pdf_path + lpnumber + '.pdf').then(function () {
console.log('PDF generated for waybill');
//Insert waybill url in db.
return waybill_url.insertWaybillUrl('Lpsimer', waybillUrl).then(function (waybill_inserted_resp) {
callback(null, true);
}).catch(function (error) {
callback(err_waybill_inserted);
});
});
});
});
});
上面的函数调用的函数如下所示,这是在另一个文件中并正确调用filename是waybill.js:
var mongoose = require('mongoose');
var q = require('promised-io/promise');
var WaybillUrlSchema = new mongoose.Schema({
lpnumber: String,
url: String,
waybilltime: Date
});
module.exports = {
insertWaybillUrl: function (lpnumber, url) {
var defer = q.defer();
var waybill_insert = new waybill_url({
lpnumber: lpnumber,
url: url,
waybilltime: new Date()
});
//Save model to MongoDB
waybill_insert.save(function (err, inserted_waybill) {
if (err) {
return defer.reject(err);
}
else {
return defer.resolve(inserted_waybill);
}
});
}
};
之前我使用这种模式进行回调,它运行良好:
waybill_url.insertWaybillUrl('Lpsimer', waybillUrl, function(err, success) {
if (err) {
} else {
}
)}
现在由于使用幻像代码来编写PDF,我必须使用.then,这使得工作变得繁琐。
需要建议我如何在回调中进行回调。
更新
phantom.create().then(function (ph) {
ph.createPage().then(function (page) {
page.open("http://codebeautify.org/xmlvalidator").then(function (status) {
page.render(base_pdf_path + lpnumber + '.pdf').then(function () {
//Insert waybill url in db.
waybill_url.insertWaybillUrl('Lpsimer', waybillUrl).then(function (waybill_inserted_resp) {
if (waybill_inserted_resp) {
callback(null, true);
}
}).catch(function (error_waybill_url_insert) {
console.log("Error in inserting waybill:" + err_waybill_inserted);
callback(error_waybill_url_insert);
});
}).catch(function (error_render) {
console.log("error_render");
callback(error_render);
});
}).catch(function (error_open) {
callback(error_open);
});
}).catch(function (error_create_page) {
callback(error_create_page);
});
}).catch(function (error_phantom_create) {
callback(error_phantom_create);
});
现在我已经按照rsp在他的回答中的建议添加了catch,但是现在我收到错误,我已经捕获并发送到另一个回调:
无法读取未定义的属性'然后'
我收到了这个错误,我添加了console.log(“error_render”); 这就是我调用幻影的page.render函数的地方。
我的要求很简单。我想使用幻像生成一个PDF文件然后我只想调用另一个文件中的另一个函数waybill_url,函数名:waybill_url.insertWaybillUrl 。但由于回调和异步行为,这两个函数的简单调用变得很麻烦。
答案 0 :(得分:3)
确保您使用CC=gcc
CFLAGS=-C
all: P0
export PATH=${PATH}:.
P0 : main.o
$(CC) -0 P0 main.o
main.o: main.c
$(CC) $(CFLAGS) main.c
而不仅仅是catch()
- 或then()
的两个参数。否则你将无法处理错误,你将收到该警告 - 在下一版本的Node中,这将是一个错误,而不是一个警告。
有关它的更多信息,请参阅此答案: