承诺不 return 回调数组
Promisify to not return callback array
有什么方法可以将回调扩充到仅 return 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
数组吗?
如果我只是 osascript
的 promisifyAll
,我可以在这里减少很多步骤。但我仍然留下了那个该死的 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 种方式编写/使用这些函数,但我对哪种方式感到困惑 "standard" 或者我猜想是主观的 "best" 有些提供了更多的通用性,有些则更容易理解并按照您的预期工作。
var Promise = require("bluebird")
var osascript = require('node-osascript');
var osascriptPromise = Promise.promisifyAll(osascript)
选项 1
Returns 回调,只是 return 整个原生回调。
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
Returns 回调并打开回调至 return 特定值。
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
Returns 使用本机回调签名数组承诺(没有错误)。
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
Returns 承诺 return 所需的特定值。
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){
});
*/
最佳选项是选项 1 / 3,但不是使用 then
,而是使用 spread
。这样您就可以访问所有变量,而无需深入研究雄心勃勃的数组。
有什么方法可以将回调扩充到仅 return 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
数组吗?
如果我只是 osascript
的 promisifyAll
,我可以在这里减少很多步骤。但我仍然留下了那个该死的 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 种方式编写/使用这些函数,但我对哪种方式感到困惑 "standard" 或者我猜想是主观的 "best" 有些提供了更多的通用性,有些则更容易理解并按照您的预期工作。
var Promise = require("bluebird")
var osascript = require('node-osascript');
var osascriptPromise = Promise.promisifyAll(osascript)
选项 1
Returns 回调,只是 return 整个原生回调。
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
Returns 回调并打开回调至 return 特定值。
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
Returns 使用本机回调签名数组承诺(没有错误)。
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
Returns 承诺 return 所需的特定值。
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){
});
*/
最佳选项是选项 1 / 3,但不是使用 then
,而是使用 spread
。这样您就可以访问所有变量,而无需深入研究雄心勃勃的数组。