我是否可以通过任何方式扩充回调,只返回result
,而不是返回包含raw
的数组?
var Promise = require("bluebird");
var osascript = require('node-osascript');
function osxBackgroundGet(callback) {
return osascript.execute([
'tell application "System Events"',
'tell current desktop',
'get picture',
'end tell',
'end tell'
].join("\n"), callback);
}
/*
osxBackgroundGet(function(err, result, raw){
console.log(result);
})
*/
var osxBackgroundGet = Promise.promisify(osxBackgroundGet);
osxBackgroundGet().then(function(signature){
var result = signature[0];
})
或者我应该在osxBackgroundGet
callback
?
像这样:
function osxBackgroundGet(callback) {
return osascript.execute([
'tell application "System Events"',
'tell current desktop',
'get picture',
'end tell',
'end tell'
].join("\n"), function(err, result, raw){
if(err) return callback(err)
return callback(err, result)
});
}
我真的不喜欢编辑图书馆的本地callback
。我应该离开signature
阵列吗?
如果我只是promisifyAll
osascript
,我可以在这里削减大量的步骤。但我还是留下了那个傻瓜signature array
。
var Promise = require("bluebird")
var osascript = Promise.promisifyAll(require('node-osascript'))
osascript.executeAsync([
'tell application "System Events"',
'tell current desktop',
'get picture',
'end tell',
'end tell'
].join("\n")).then(function(signature){
console.log(signature);
});
更新
我可以通过4种方式编写/使用这些功能,而且我很困惑这是什么?"标准"或者我猜主观的最好的"有些提供更多功能,有些更容易理解和工作,因为你期望。
var Promise = require("bluebird")
var osascript = require('node-osascript');
var osascriptPromise = Promise.promisifyAll(osascript)
选项1
返回回调并返回整个本机回调。
function osxBackgroundGetCallback(callback){
return osascript.execute([
'tell application "System Events"',
'tell current desktop',
'get picture',
'end tell',
'end tell'
].join("\n"), callback);
}
// usage
/*
var getBg = Promise.promisify(osxBackgroundGetCallback);
getBg().then(function(sig){
var bg = sig[0]
});
*/
选项2
返回回调并打开回调以返回特定值。
function osxBackgroundGetCallbackValue(callback){
return osascript.execute([
'tell application "System Events"',
'tell current desktop',
'get picture',
'end tell',
'end tell'
].join("\n"), function(err, result, raw){
if(err) return callback(err);
return callback(result);
});
}
// usage
/*
var getBg = Promise.promisify(osxBackgroundGetCallbackValue);
getBg().then(function(bg){
});
*/
选项3
使用本机回调签名数组返回promise(没有错误)。
function osxBackgroundGetPromise(){
return osascriptPromise.executeAsync([
'tell application "System Events"',
'tell current desktop',
'get picture',
'end tell',
'end tell'
].join("\n"))
}
// usage
/*
getBg().then(function(sig){
var bg = sig[0];
});
*/
选项4
返回promise,然后返回所需的特定值。
function osxBackgroundGetPromiseValue(){
return osascriptPromise.executeAsync([
'tell application "System Events"',
'tell current desktop',
'get picture',
'end tell',
'end tell'
].join("\n")).then(function(sig){
var result = sig[0]
var raw = sig[1]
return result
})
}
// usage
/*
getBg().then(function(bg){
});
*/